繁体   English   中英

如何确保使用 Task.Run 创建新线程?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM