在第一个异步方法之前,在异步方法的开始处使用昂贵的代码是否不好?await
叫做?这段代码是否应该用TaskEx.Run
反而?
public async Task Foo()
{
// Do some initial expensive stuff.
// ...
// First call to an async method with await.
await DoSomethingAsync;
}
正如里德所说,这实际上取决于上下文。该代码必须运行在some点 - 但根据上下文,它最终可能会在线程池线程而不是某个关键线程上运行。
而不是使用Task.Run
,我会用TaskEx.Yield
:
public async Task Foo()
{
await TaskEx.Yield();
// Do expensive stuff
}
据我所知,这基本上是一种立即返回调用者的方法,但允许立即安排异步方法的其余部分。如果您处于 Windows 窗体 UI 线程之类的环境中,那么这样做是没有意义的,因为您将立即返回到 UI 线程(并在那里运行昂贵的代码) - 但如果您处于上下文中,则这是有意义的当前线程不应被阻塞,但延续在另一个线程上运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)