C# 任务同步

C# 任务同步,c#,synchronization,task,task-parallel-library,C#,Synchronization,Task,Task Parallel Library,我有一个算法是在tpl的任务中执行的 在每次迭代中,我都要执行一个事件处理程序,它更新winforms客户端中的进度条(通过mvp预设器) 问题是,在调试模式下,我首先看到的是执行主任务中的代码。此代码结束后,调试器转到内部任务。我如何同步它?我想在每次迭代中更新进度条。现在的效果是,我已经在datagridview中得到了算法结果,然后我看到了工作(更新)进度条:///p>我假设您是调度程序变量是UI同步上下文的任务调度程序实例,因此您只是试图通过使用任务API来保持一致,而不是直接使用控件/

我有一个算法是在tpl的任务中执行的

在每次迭代中,我都要执行一个事件处理程序,它更新winforms客户端中的进度条(通过mvp预设器)


问题是,在调试模式下,我首先看到的是执行主任务中的代码。此代码结束后,调试器转到内部任务。我如何同步它?我想在每次迭代中更新进度条。现在的效果是,我已经在datagridview中得到了算法结果,然后我看到了工作(更新)进度条:///p>我假设您是
调度程序
变量是UI同步上下文的
任务调度程序
实例,因此您只是试图通过使用任务API来保持一致,而不是直接使用
控件/窗口::调用

同步的唯一方法是调用
t.Wait()
。这显然会阻止并行工作继续进行,直到调用
Notify
完成,但如果确实需要将UI与进度同步,那么这是唯一的方法

public delegate void NotifyAboutIterationEnd(int iteration);

public event NotifyAboutIterationEnd Notify;

 var task = Task.Factory.StartNew(() =>
   {
       foreach (..
       {
var t = Task.Factory.StartNew(p =>
                                             {
                                                 Notify(++index);
                                             },CancellationToken.None,TaskCreationOptions.None,Scheduler);
           foreach (..