我试图从创建任务的线程(不是GUI线程)中执行ContinueWith中的Func。我尝试了这段代码:
但是调用线程和.ContinueWith线程是不同的。有什么想法为什么? 我得到了以下结果:
1 3 3
看起来传递调度程序导致ContinueWith从执行实际任务的线程中执行,而我希望它从创建任务的线程中执行,即在这种情况下为1。
谢谢
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
var scheduler = TaskScheduler.Current.FromCurrentSynchronizationContext();
Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId);
var t = Task.Factory.StartNew(() =>
{
Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId);
})
.ContinueWith(
_ => Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId),
// Specify where to execute the continuation
scheduler
);
t.Wait();
但是调用线程和.ContinueWith线程是不同的。有什么想法为什么? 我得到了以下结果:
1 3 3
看起来传递调度程序导致ContinueWith从执行实际任务的线程中执行,而我希望它从创建任务的线程中执行,即在这种情况下为1。
谢谢
t.Wait();
处发生死锁,因为等待不会处理已发布的任务。 - acelent