ホームページ >バックエンド開発 >C#.Net チュートリアル >非同期プログラミング モデルと同時プログラミングを使用して、C# でタスクの分散とソリューションを処理する方法
現代のソフトウェア開発では、多くの場合、処理 A に直面します。多数のタスクが独立しており、互いに干渉しません。プログラムのパフォーマンスと効率を向上させるために、これらのタスクを同時に処理し、各タスクが完了したときに対応する結果が得られるようにしたいと考えています。オブジェクト指向プログラミング言語である C# は、非同期プログラミング モデルと同時プログラミング ソリューションを提供しており、これらの機能を適切に使用することで、タスクの分散と問題解決を効果的に処理できます。
非同期プログラミング モデルとは、特定のタスクを実行するときにメイン スレッドがブロックされず、タスクが他のスレッドまたはスレッド プールに非同期に委任されて処理されることを意味します。スレッドは他の操作を引き続き実行できます。 C# では、async および await キーワードを使用して非同期プログラミング モデルを実装できます。以下は、非同期プログラミング モデルの使用例です。
static async Task<int> DoSomeWorkAsync() { // 模拟一个耗时操作 await Task.Delay(1000); return 42; } static async void Main(string[] args) { Console.WriteLine("开始执行任务"); int result = await DoSomeWorkAsync(); Console.WriteLine("任务结果:" + result); Console.WriteLine("任务执行完毕"); // 等待用户输入,防止控制台窗口关闭 Console.ReadLine(); }上記のコードでは、DoSomeWorkAsync() メソッドは非同期メソッドであり、await キーワードは、タスクの実行時にブロックしないことをコンパイラに指示します。 .Delay() メソッドのメインスレッド。 Main() メソッドも非同期メソッドとしてマークされており、 await キーワードを使用して DoSomeWorkAsync() メソッドの結果を待ちます。非同期プログラミング モデルを使用すると、タスクが完了するまで他の操作を実行し続けることができるため、プログラムの応答速度が向上します。 2. コンカレント プログラミング
大量のタスクを処理する場合、コンカレント プログラミングはマルチコア プロセッサの利点を最大限に活用し、タスクの処理速度を向上させることができます。 C# では、スレッド、スレッド プール、タスク並列ライブラリなどを使用して、同時プログラミングを実装できます。
static void DoSomeWork() { Console.WriteLine("线程开始执行任务"); // 模拟耗时操作 Thread.Sleep(1000); Console.WriteLine("线程任务执行完毕"); } static void Main(string[] args) { Console.WriteLine("开始执行任务"); // 创建线程 Thread thread = new Thread(DoSomeWork); // 启动线程 thread.Start(); Console.WriteLine("任务执行中"); // 等待线程执行完毕 thread.Join(); Console.WriteLine("任务执行完毕"); // 等待用户输入,防止控制台窗口关闭 Console.ReadLine(); }
static void DoSomeWork() { Console.WriteLine("线程开始执行任务"); // 模拟耗时操作 Thread.Sleep(1000); Console.WriteLine("线程任务执行完毕"); } static void Main(string[] args) { Console.WriteLine("开始执行任务"); // 使用线程池执行任务 ThreadPool.QueueUserWorkItem(_ => DoSomeWork()); Console.WriteLine("任务执行中"); // 等待用户输入,防止控制台窗口关闭 Console.ReadLine(); }
static void DoSomeWork() { Console.WriteLine("任务开始执行"); // 模拟耗时操作 Thread.Sleep(1000); Console.WriteLine("任务执行完毕"); } static void Main(string[] args) { Console.WriteLine("开始执行任务"); // 创建任务 Task task = new Task(DoSomeWork); // 启动任务 task.Start(); Console.WriteLine("任务执行中"); // 等待任务执行完毕 task.Wait(); Console.WriteLine("任务执行完毕"); // 等待用户输入,防止控制台窗口关闭 Console.ReadLine(); }
実際のアプリケーションでは、多数のタスクを処理し、これらのタスクを複数のスレッドまたはスレッド プールに分散して同時実行する必要がある場合があります。以下は、非同期プログラミング モデルと同時プログラミングを使用してタスクの分散と解決策を処理する方法を示すサンプル コードです:
static async Task<int> DoSomeWorkAsync() { // 模拟一个耗时操作 await Task.Delay(1000); return 42; } static async Task Main(string[] args) { Console.WriteLine("开始执行任务"); var tasks = new List<Task<int>>(); for (int i = 0; i < 10; i++) { tasks.Add(DoSomeWorkAsync()); } // 等待所有任务完成 await Task.WhenAll(tasks); Console.WriteLine("所有任务执行完毕"); // 输出任务结果 foreach (var task in tasks) { Console.WriteLine("任务结果:" + task.Result); } // 等待用户输入,防止控制台窗口关闭 Console.ReadLine(); }上記のコードでは、非同期プログラミング モデルを使用して複数のタスクを作成し、それらを割り当てます。これらのタスクはタスク リストに追加されます。 Task.WhenAll() メソッドを呼び出してすべてのタスクが完了するのを待ってから、タスク リストを走査してタスクの結果を出力します。 結論:
非同期プログラミング モデルと同時プログラミングを通じて、多数のタスクを処理する際のプログラムのパフォーマンスと効率を向上させることができます。非同期プログラミング モデルでは、タスクが完了するのを待っている間も他の操作を実行し続けることができますが、同時プログラミングではマルチコア プロセッサを最大限に活用してタスクの実行速度が向上します。実際のアプリケーションでは、特定の状況に応じてタスクを分散し、問題を解決するための適切な方法を選択できます。上記のサンプル コードでは、いくつかの基本的なメソッドとテクニックを提供していますが、実際のアプリケーションでは、より詳細で複雑な処理メソッドが必要になる場合があり、特定の状況に応じて調整および最適化する必要があります。
以上が非同期プログラミング モデルと同時プログラミングを使用して、C# でタスクの分散とソリューションを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。