StartNew方法是否可能永远不会完成执行?
例如,在下面的程序中,如果不知道Method1或Method2中的代码,是否可能永远不执行Console.WriteLine("Tasks Created!");
调用,并且该程序无限期地继续运行而不退出?
using System;
using System.Threading.Tasks;
using MyMethods;
class Program
{
static void Main(string[] args)
{
var one = Task.Factory.StartNew(() => Methods.Method1());
var two = Task.Factory.StartNew(() => Methods.Method2());
Console.WriteLine("Tasks Created!");
}
}
如果是这样,会导致什么原因?
答案 0 :(得分:3)
除非出现严重错误,否则StartNew
会立即返回。因此,您的应用将显示“已创建的任务!”然后退出,可能在Method1
和Method2
完成执行之前(很可能在他们甚至开始执行之前)。
当然,可能可能会出现严重错误,并阻止您的代码进入WriteLine
来电。有人可能已经用错误的实现替换了默认的TaskScheduler
。堆可能以引入疯狂行为的方式被破坏。 JIT编译器中可能存在一个模糊的死锁。由于恶意软件和/或超频CPU,计算机可能会出现问题。其中一个任务可以在主线程上调用SuspendThread
。有人可以附加调试器,在断点处停止,并且永远不会继续。用你的想象力。
但除非您准备推理total breakdown of normal functioning,否则您可以放心地假设StartNew
将对任务进行排队,然后返回。