首页 > 后端开发 > C++ > 如何简单地在C#中进行非阻塞方法调用?

如何简单地在C#中进行非阻塞方法调用?

DDD
发布: 2025-01-18 15:46:08
原创
669 人浏览过

How Can I Make Non-Blocking Method Calls in C# Simply?

简化 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.QueueUserWorkItemTask.Run 都可以防止主线程在异步方法执行期间阻塞。

但是,在 Main 方法终止之前考虑该方法的完成是否是必要的,这一点至关重要。 在 ASP.NET 等环境中,可能需要额外的机制来防止异步操作提前终止。

以上是如何简单地在C#中进行非阻塞方法调用?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板