我正在努力在网上找到任何可靠的信息,但我们假装我有一个如下方法:
public int DoSomething()
{
// some sync logic that takes a while
return someResult
}
因此我们假设它是一个完全同步的方法,并且当前将阻止调用者开启的线程持续100ms。那么就让我说我想创建一个在执行时不会阻塞该线程的版本,它就像刚刚做的一样简单:
public Task<int> DoSomethingAsync()
{
// some sync logic that takes a while
return Task.FromResult(someResult)
}
据我所知Task.Run
会导致代码在一个线程中执行,但是.net基本上解释了Task/<T>
返回类型的任何方法应该是非阻塞的吗?
(我犹豫是否使用async一词,因为它在.net中有混合含义,但如上所示,这里没有等待使用)
答案 0 :(得分:3)
没有。所有改变返回类型的都是......改变返回类型。
你正在改变你的承诺#34;当我回来时,我会给你一个int
&#34;当我回来时,我会给你一些最终会提供int
&#34; (实际上,该值可能已经可用,但需要注意)。
方法如何<{1}}完全是内部实现细节,这是您的方法所关注的问题。在您当前更改的实现中,它通过完全在调用它的同一个线程上运行,然后在最后将结果填充到Task
中来实现它 - 没有真正的好处。
如果您添加了Task
关键字并离开了async
行,那么编译器就会为您提供更多线索:
此
return someResult;
方法缺少&#39;async
&#39;运营商并将同步运行。考虑使用......