legongju.com
我们一直在努力
2024-12-24 03:41 | 星期二

.net和c#如何实现并发编程

在.NET和C#中实现并发编程,可以使用多种方法。以下是一些常用的技术和模式:

1. 任务并行库(TPL)

任务并行库(TPL)是.NET框架的一部分,提供了Task类和相关的API,用于并行和异步编程。

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        await Task.WhenAll(DoWorkAsync("Task1"), DoWorkAsync("Task2"), DoWorkAsync("Task3"));
    }

    static async Task DoWorkAsync(string taskName)
    {
        Console.WriteLine($"{taskName} started.");
        await Task.Delay(1000); // 模拟耗时操作
        Console.WriteLine($"{taskName} completed.");
    }
}

2. 并行LINQ(PLINQ)

并行LINQ允许你以并行方式执行LINQ查询。

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

        var result = numbers.AsParallel()
                             .Where(n => n % 2 == 0)
                             .ToList();

        Console.WriteLine("Even numbers:");
        foreach (var number in result)
        {
            Console.WriteLine(number);
        }
    }
}

3. 异步编程模式(APM)

异步编程模式(APM)使用BeginXXXEndXXX方法来执行异步操作。

using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        using (HttpClient client = new HttpClient())
        {
            var response = await client.GetAsync("https://api.example.com/data");
            var data = https://www.yisu.com/ask/await response.Content.ReadAsStringAsync();>

4. 并发集合

.NET提供了并发集合类,如ConcurrentQueueConcurrentDictionary等,用于在多线程环境中安全地操作集合。

using System;
using System.Collections.Concurrent;
using System.Threading.Tasks;

class Program
{
    static ConcurrentQueue queue = new ConcurrentQueue();

    static void Main()
    {
        Task producer = ProduceAsync();
        Task consumer = ConsumeAsync();

        Task.WaitAll(producer, consumer);
    }

    static async Task ProduceAsync()
    {
        for (int i = 0; i < 10; i++)
        {
            queue.Enqueue(i);
            Console.WriteLine($"Produced: {i}");
            await Task.Delay(100);
        }
    }

    static async Task ConsumeAsync()
    {
        while (queue.TryDequeue(out int item))
        {
            Console.WriteLine($"Consumed: {item}");
            await Task.Delay(200);
        }
    }
}

5. 锁和同步块

使用lock关键字或Monitor类来保护共享资源。

using System;
using System.Threading;

class Program
{
    private static readonly object lockObject = new object();
    private static int sharedResource = 0;

    static void Main()
    {
        Thread t1 = new Thread(() => IncrementResource());
        Thread t2 = new Thread(() => IncrementResource());

        t1.Start();
        t2.Start();

        t1.Join();
        t2.Join();

        Console.WriteLine($"Final value: {sharedResource}");
    }

    static void IncrementResource()
    {
        lock (lockObject)
        {
            sharedResource++;
            Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId} incremented: {sharedResource}");
        }
    }
}

6. 使用asyncawait

在方法中使用asyncawait关键字来简化异步编程。

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        await DoWorkAsync();
    }

    static async Task DoWorkAsync()
    {
        Console.WriteLine("Started.");
        await Task.Delay(1000); // 模拟耗时操作
        Console.WriteLine("Completed.");
    }
}

这些技术和模式可以帮助你在.NET和C#中实现高效的并发编程。根据具体的需求和场景,可以选择合适的方法来处理并发问题。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/53544.html

相关推荐

  • c++ stat 怎样实现精准控制

    c++ stat 怎样实现精准控制

    在C++中,stat函数用于获取文件或目录的元信息
    #include #include #include #include int main() { struct stat file_stats; int result = stat("example.t...

  • c++ stat 为何如此高效

    c++ stat 为何如此高效

    C++ 的 stat 函数之所以高效,主要是因为它是一个操作系统级别的系统调用,直接与底层操作系统交互。这意味着它可以快速地获取文件的状态信息,而不需要经过 C++...

  • c++ stat 应用领域有哪些

    c++ stat 应用领域有哪些

    stat 是 C++ 标准库中的一个类,它位于 头文件中。stat 类主要用于获取文件或目录的元信息,如文件大小、创建时间、修改时间等。以下是一些 stat 类的常见应用领...

  • c++ stat 和 c 语言啥区别

    c++ stat 和 c 语言啥区别

    C++的stat函数和C语言的stat函数都用于获取文件的状态信息,但它们之间存在一些差异 C++中的stat函数位于头文件中,而C语言中的stat函数位于和头文件中。在C++中...

  • .net和c#在游戏开发中的应用

    .net和c#在游戏开发中的应用

    .NET是一个开发框架,而C#是一种编程语言,它们在游戏开发中有着广泛的应用。C#作为.NET框架的一部分,特别适用于游戏开发,尤其是与Unity游戏引擎结合使用时。以...

  • 如何用c#优化.net性能

    如何用c#优化.net性能

    在C#中优化.NET性能有很多方法,以下是一些建议: 使用最新版本的.NET框架:始终确保使用最新版本的.NET框架,因为新版本通常会包含性能改进和优化。 代码剖析:...

  • .net和c#哪个更适合企业应用

    .net和c#哪个更适合企业应用

    在决定.NET和C#哪个更适合企业应用时,我们需要考虑多个因素,包括开发生态、性能、可扩展性、社区支持等。.NET和C#都是微软开发的,它们之间的关系密切。.NET是...

  • .net和c#有何区别

    .net和c#有何区别

    .NET是一个由微软开发的跨平台的软件开发框架,它支持多种编程语言,而C#是.NET框架中的一种高级编程语言。简单来说,.NET是平台,C#是语言。以下是它们的具体区...