C# 什么';在win服务中使用async/await的优点是什么
我有许多win服务和控制台应用程序运行在task scheduler上,C# 什么';在win服务中使用async/await的优点是什么,c#,.net-core,C#,.net Core,我有许多win服务和控制台应用程序运行在task scheduler上, 由于netstandard 2.0和core.net将所有I/O调用都转换为异步,所以我的所有代码都是以异步/等待模式编写的,当我没有任何可以冻结的UI时,使用这种模式有什么好处吗?是的,有好处 假设您的服务中有一个I/O操作,从某个套接字获取数据需要3秒钟。使用Async/Await模式,您可以在这3秒钟内完成其他CPU绑定的工作,而不会阻塞线程 一些基本的例子 var obj = new Demo(); var tas
由于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);
}
}
}
当我没有任何可以冻结的UI时,使用这种模式有什么好处吗
async
/wait
的要点是释放线程。防止冻结UI是一个具体的例子:async
/await
可用于释放UI线程,因此它不会冻结
在其他情况下,释放线程是有帮助的。例如,对于web服务器,释放线程允许更大的可伸缩性
在某些情况下,释放线程没有那么大帮助。对于桌面应用程序来说,拥有一个(或十个)额外的线程并没有什么大不了的,因为大多数桌面计算机都没有得到充分利用。特别是对于控制台应用程序,您希望阻止主线程,否则应用程序将提前退出。然而,这并不是说控制台应用程序中不应该使用async
;我有时使用它只是因为您可以像并行并发一样轻松地进行异步并发,特别是在您调用的API是异步的情况下
因此,虽然在某些情况下,
async
是一个明显的胜利,但在其他情况下,它更像是一个判断调用。即使您确定异步代码对于您的Win32服务更易于维护,那么切换是否值得呢?这是您必须自己回答的问题。冻结的UI会立即向用户提供反馈,因此经常提到,类似的冻结后台进程也会为某人(进程)阻塞资源,尽管它不容易观察到。所以优势几乎是一样的(事实上,async UI post总是提到UI进程,只是去掉了UI这个词)?我的线程正在等待并阻止一个线程,任何应用程序都可以重用它吗?
1
2
3
4
5
IO Done
6
7
8
9