相关疑难解决方法(0)

返回Task的接口的同步实现

类似于在同步代码中实现需要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

8
推荐指数
3
解决办法
1557
查看次数