提问人:David Klempfner 提问时间:10/17/2023 最后编辑:David Klempfner 更新时间:10/17/2023 访问量:34
将 Task.Run 用于 IO 绑定工作以避免更新方法签名
Using Task.Run for IO bound work to avoid updating method signatures
问:
此方法包含一堆 Redis 代码,并在许多地方调用,并且是深度方法调用堆栈的一部分:
public void Save()
{
Task.Run(async () =>
{
var transaction = cache.CreateTransaction();
var _ = transaction.StringSetAsync();
_ = transaction.SetAddAsync();
await transaction.ExecuteAsync();
}).Wait();
}
我知道线程池线程将用于完成这项工作,并且调用线程将通过调用被阻止,并且在等待 Redis 代码完成时将无法再接受任何 ASP.NET 请求。Wait()
这种阻塞是否微不足道,足以保证保持代码的原样,以避免必须更新调用此代码的所有方法的签名以包含 /?async
await
另外,因为只有 ed 在委托中,所以可以在上面的 s 完成之前运行吗?transaction.ExecuteAsync()
await
transaction.ExecuteAsync()
Task
答: 暂无答案
评论
Save
Task.Run().Wait()
Save
StringSetAsync
ExecuteAsync
why two threads are blocked
代码同时阻塞了请求线程和用于执行 的线程。如果你使用没有线程将被阻止Task.Run
async/await
Would this blocking be insignificant enough to warrant keeping the code
opinion-based