简化 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中文网其他相关文章!