[英]How to ensure a new thread is created with Task.Run?
以下代码在 99% 的情况下都会引发异常。
如何确保使用 Task.Run 创建新线程?
int e;
void Main()
{
Task.Run(() =>
{
e = Thread.CurrentThread.ManagedThreadId;
Task.Run(() => {CheckThread();}).Wait();
}).Wait();
Console.WriteLine("finish");
}
void CheckThread()
{
if(e == Thread.CurrentThread.ManagedThreadId)
{
throw new Exception("Error: " + Thread.CurrentThread.ManagedThreadId);
}
}
此代码将在新线程中运行任务代码
var t = new Task(CheckThread, TaskCreationOptions.LongRunning);
t.Start();
t.Wait();
但请注意,这种行为并未记录在案。 所以,如果你想确定你正在创建一个线程,你必须自己创建一个
这样做的一种方法,同时使用 Task 来知道线程何时完成
var tcs = new TaskCompletionSource<object>();
var thread = new Thread(() =>
{
CheckThread();
tcs.SetResult(null);
} );
thread.Start();
tcs.Task.Wait();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.