【发布时间】:2015-09-28 00:55:42
【问题描述】:
如果我将我正在调用的一些方法(从我的控制器)放入 Task.Run 这究竟是做什么的?我没有使用异步函数,也没有使用 await。
...
FunctionOne();
FunctionTwo();
return View(FunctionThree().Result);
}
private void FunctionOne()
{
Task.Run(() =>
{
....
}
}
private void FunctionTwo()
{
Task.Run(() =>
{
....
}
}
private Task<MyType> FunctionThree()
{
return Task.Run(() =>
{
....
}
}
【问题讨论】:
-
它将在后台启动任务 1 和 2,然后阻塞并等待任务 3 完成,如果在 UI 线程上运行它可能会死锁。如果/当它完成时,它将返回该任务的结果。任务 1 和 2 可能仍在运行。
-
为什么会死锁?这个我不是很清楚?您认为这是加快速度的好方法吗?
-
你认为这是一个好的做法吗?
-
另外,“这是加快速度的好方法吗?”我不知道,你想做什么?你真的不想在开始任务2之前知道任务1已经完成吗?在开始任务 3 甚至从方法返回之前根本不等待任务 1 或 2?如果你不这样做,那么是的,这看起来是一种解耦独立工作的好方法。