我正在尝试编写一些异步c#代码,而我在理解async
vs .Wait()
的资源方面遇到了一些麻烦。我已经阅读了很多线程和网站,但不知怎的,我仍然不确定如何/为什么我不应该等待。我的计划的目标是:
我有任务:
public static void Main()
{
Task t = DoWork();
DoMoreWork();
t.Wait();
DoWorkThatNeedsT();
}
public Task DoWork()
{
return Task.Run(() => {Thread.Sleep(1000);});
}
据我所知,在这个实例中使用async await只涉及将DoWork()更改为以下内容:
public async Task DoWork()
{
return await Task.Run(() => {Thread.Sleep(1000);});
}
然后我在调用方法中仍然有一个.Wait()
。这是否应该获得无线程异步的好处?我应该以不同的方式实施这个吗?
答案 0 :(得分:2)
您所描述的并不是async / await的用途。 Async / await用于将线程释放回操作系统以供其他系统使用,同时系统等待无法控制的内容(例如,等待在远程系统上完成sql语句)。
您想要的是与其他代码并行运行任务。使用Task.Run但不要担心异步/等待,因为你什么都没有,你真的在等待。
Stephen Cleary - There is no thread非常适合理解何时使用async / await。