C# での非ブロッキング メソッド呼び出しの簡素化
C# では、ノンブロッキング メソッド (メイン スレッドを停止せずに非同期で実行するメソッド) を作成する方法がいくつか提供されています。 WCF の [OperationContract(IsOneWay = true)]
属性はこの機能を提供しますが、単純なシナリオでは過剰になる可能性があります。
最も簡単なアプローチは ThreadPool.QueueUserWorkItem
を利用します。このメソッドはタスクをスレッド プールに効率的に追加し、非同期実行を可能にします。
これがわかりやすい例です:
<code class="language-csharp">class Foo { static void Main() { ThreadPool.QueueUserWorkItem(_ => FireAway()); //Asynchronous execution Console.WriteLine("Immediate execution"); } static void FireAway() { System.Threading.Thread.Sleep(5000); Console.WriteLine("Execution after 5 seconds"); } }</code>
代わりに、C# 5.0 以降のバージョンでは Task.Run
を提供し、スレッド プールのスレッドで非同期実行を実現するためのより現代的で簡潔な方法を提供します。
<code class="language-csharp">Task.Run(() => FireAway());</code>
ThreadPool.QueueUserWorkItem
と Task.Run
はどちらも、非同期メソッドの実行中にメインスレッドがブロックされるのを防ぎます。
ただし、Main
メソッドが終了する前にメソッドを完了することが不可欠かどうかを検討することが重要です。 ASP.NET のような環境では、非同期操作の早期終了を防ぐために追加のメカニズムが必要になる場合があります。
以上がC# で非ブロッキング メソッド呼び出しを簡単に行うにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。