【发布时间】:2018-08-17 09:38:40
【问题描述】:
我有一个 ASPX 页面,我无法将其转换为 async,但它在同步上下文中使用了一些 async 方法。它调用它们的方式是这样的:
public void MySyncMethod()
{
var myTask = Task.Run(() => _myField.DoSomethingAsync());
myTask.Wait();
//use myTask.Result
}
就async/await 和/或阻塞而言,这样做和以下有什么区别吗?
public void MySyncMethod()
{
var myTask = _myField.DoSomethingAsync(); //just get the Task direct, no Task.Run
myTask.Wait();
//use myTask.Result
}
我假设以前的开发人员添加了Task.Run 是有原因的。但是我在访问HttpContext 中的东西时遇到了问题,因为工作正在不同的线程上运行。
这里有使用Task.Run的理由吗?
【问题讨论】:
-
如果它也是异步的,则不需要将您的任务添加到 Task.Run 中。 Task.Run 用于异步运行同步代码。底部是最好的方法,恕我直言。
-
在可能的情况下,如果你不能让你的代码本身异步(你应该非常努力),如果系统同时提供同步和异步,请使用同步 API。你不会受益在这里你阻塞你的请求线程。
标签: c# asp.net async-await