c# - 在 win 服务中使用 async/await 有什么好处

标签 c# .net-core

我有许多在任务调度程序上运行的 win 服务和控制台应用程序, 由于 netstandard 2.0 和 core .net 将所有 I/O 调用转为异步,我的所有代码都编写为异步/等待模型,当我没有任何可以卡住的 UI 时,使用这种模式有什么好处吗?

最佳答案

是的,有一个优势。

假设您的服务中有一个 I/O 操作需要 3 秒才能从某个套接字获取数据。使用 Async/Await 模式可以让您在这 3 秒内完成其他 CPU 密集型工作,而不会阻塞线程。

一些基本的例子

var obj = new Demo();
var task1 = obj.WaitForIO(); //Imagine this as a database call that takes 5 seconds to finish
var task2 = obj.DoSomethingElse(); //Imagine this as some CPU bound work eg: some calculations
await Task.WhenAll(task1,task2);

public class Demo
{
    public async Task WaitForIO()
    {
        await Task.Delay(5000); 
        Console.WriteLine("IO Done");
    }

    public async Task DoSomethingElse()
    {
        for(var i=1;i<10;i++)
        {
            Console.WriteLine(i);
            await Task.Delay(1000);
        }
    }
}

输出:

1
2
3
4
5
IO Done
6
7
8
9

关于c# - 在 win 服务中使用 async/await 有什么好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55860647/

相关文章:

c# - 当 ListView 被禁用时,在 ListView 中启用分页。 ASP.NET C#

c# - 有没有手机的编译器模拟器?

c# - 为泛型类实现 IComparable<T> 接口(interface)以比较类型 T

entity-framework - 如何在 EF.Core 中构建动态 where 过滤器来处理等于、LIKE、gt、lt 等

c# - 在 linux 机器上运行 c# 应用程序时 SOAP 身份验证失败

c# - WPF 和 Unity - 在类型上找不到匹配的构造函数

c# - Azure Service Fabric Actor 初始化

c# - ILoggerFactory 与 serviceCollection.AddLogging 与 WebHostBuilder.ConfigureLogging

c# - Net Core 集成测试 : Run Startup. cs 和来自其他程序的配置

.net-core - System.Threading.Thread.CurrentThread.ManagedThreadId 的 .NET Core 1.0 等效项