非阻塞任务.在.NET 4.5中等待

som*_*guy 3 c# asynchronous async-await

Task t = Task.Run(async () => { await someAsyncMethod(); });
t.Wait();
Run Code Online (Sandbox Code Playgroud)

这是否意味着在t.Wait()等待的时候,线程被用于其他东西而不只是坐在那里等待任务完成?只是因为我用过async () => { await someAsyncMethod(); }

Ste*_*ary 6

Wait 将阻止调用线程.

要进行非阻塞等待,请使用await:

await Task.Run(async () => { await someAsyncMethod(); });
Run Code Online (Sandbox Code Playgroud)

但是,Task.Run通常只应该用于CPU绑定方法,所以你更有可能这样做:

await someAsyncMethod();
Run Code Online (Sandbox Code Playgroud)

  • 我明白了,但如果运行此代码的方法不是异步,我就不能使用await.有没有办法实现这一目标? (2认同)
  • @some_guy你在你的代码中,在任务内部调用了`await`,所以很明显它已经异步了.如果该方法确实是一个同步CPU绑定方法*那么*`Task.Run`将是合适的. (2认同)