null
null
我从Stephen Cleary的博客上读到,Task.run应该只用于CPU绑定的操作,显然上传一大块数据不是CPU绑定的。因此,如果我在
所以我的问题是,使用Task.Run来包装和调用异步函数是不是一种不好的做法?
调用该函数将使异步关键字散布整个调用树。
是的,这就是异步代码的要点。如果同步调用异步函数,那么它就不是异步的。
最好的解决方案是采用异步代码,并用
例如,您可以使用线程池黑客:
Task.Run(() => UploadAsync(stream)).GetAwaiter().GetResult();
这会将异步代码包装到后台线程中(避免死锁问题,但也会阻止异步代码使用调用上下文),并阻止等待结果(使用
但是,请注意,为异步方法公开同步包装是一种反模式。因此,提供以这种方式实现的
您可以对任务调用。wait(),这将阻塞线程,直到请求完成。
异步调用确实有“感染”整个调用树的趋势,但是我还没有找到任何合适的方法来避免这种情况。