Wil*_*iam 2 .net c# multithreading task-parallel-library
Task t = new Task(() =>
{
//I would expect this to be on a worker thread, but it's not!
Thread.Sleep(1000);
});
Task test = new Task(() =>
{
Thread.Sleep(1000);
});
test.ContinueWith(x =>
{
//Do some UI Updates here, but also start another Task running.
t.Start();
}, TaskScheduler.FromCurrentSynchronizationContext());
test.Start();
Run Code Online (Sandbox Code Playgroud)
为什么t在UI线程上调用gets.据我所知,我创建了一个持续Task反对test其正确地被调用在UI线程上,但我然后开始一个新任务的运行.现在我知道我可以通过指定TaskScheduler.Default作为重载方法来解决这个问题t.Start,但是为什么Task在ui线程上开始新的?
但为什么新的
Task开始在ui线程上?
因为除非另外指定,否则调用Start任务会调度当前的任务TaskScheduler,在您的情况下,该任务是SynchronizationContext您使用创建的UI线程的正面TaskScheduler.FromCurrentSynchronizationContext().
启动
Task,将其安排执行到当前TaskScheduler.
如果您希望将该任务安排在TaskScheduler与当前任务不同的任务上,则可以将其作为参数传递:
t.Start(TaskScheduler.Defualt);
Run Code Online (Sandbox Code Playgroud)
注意:几乎没有可以想象的使用Task.Start是最好的解决方案.你应该重新考虑这个途径.
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |