类似于在同步代码中实现需要Task返回类型的接口,尽管我很好奇我是否应该忽略编译器错误而不是我的情况.
假设我有这样的界面:
public interface IAmAwesome {
Task MakeAwesomeAsync();
}
Run Code Online (Sandbox Code Playgroud)
在一些实现中,通过使用async和异步完成来实现令人敬畏的好处await.这实际上是接口试图允许的内容.
在其他情况下,也许很少见,只需要一个简单的同步方法来制作真棒.所以我们假设实现如下:
public class SimplyAwesome : IAmAwesome {
public async Task MakeAwesomeAsync() {
// Some really awesome stuff here...
}
}
Run Code Online (Sandbox Code Playgroud)
这有效,但编译器警告:
这种方法缺少"等待"运算符并将同步运行.考虑使用
await运算符等待非阻塞API调用,或者"等待TaskEx.Run(...)"在后台线程上执行CPU绑定工作.
编译器实际上是在建议这个解决方案:
public class SimplyAwesome : IAmAwesome {
public async Task MakeAwesomeAsync() {
await Task.Run(() => {
// Some really awesome stuff here, but on a BACKGROUND THREAD! WOW!
});
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 当我选择忽略此编译器警告时应该确定什么?在某些情况下,工作非常简单,为它产生一个线程无疑会适得其反.
c# multithreading asynchronous task-parallel-library async-await