C# “我该怎么做?”;WaitAll“;在多个衍生任务配置上等待任务?
我有一个C#控制台应用程序,可以生成多个任务线程。我需要等待所有线程完成后才能退出应用程序,否则它会关闭所有线程。如何在配置的taskawaiter上执行“.WaitAll()”(我假设这就是我想要观看的内容)C# “我该怎么做?”;WaitAll“;在多个衍生任务配置上等待任务?,c#,.net,C#,.net,我有一个C#控制台应用程序,可以生成多个任务线程。我需要等待所有线程完成后才能退出应用程序,否则它会关闭所有线程。如何在配置的taskawaiter上执行“.WaitAll()”(我假设这就是我想要观看的内容) Configure await不会更改任务本身的任何属性,它只是告诉编译器在等待任务后是否关心当前上下文。所以 var task = Task.Delay(1000); // ... await task.ConfigureAwait(false); 与相同 var task = Ta
Configure await不会更改任务本身的任何属性,它只是告诉编译器在等待任务后是否关心当前上下文。所以
var task = Task.Delay(1000);
// ...
await task.ConfigureAwait(false);
与相同
var task = Task.Delay(1000).ConfigureAwait(false);
// ...
await task;
在您的特定情况下,为您实际上不打算等待的任务配置等待是没有意义的。你应该把它们聚合起来,一起等待它们
你可能想做的是
var tasks = new List<Task>();
foreach (var type in types)
{
var task = Task.Run(() =>
{
TestTaskAsync(entityType);
OnComplete($"PROCESSING FOR ENTITY ({entityType.Id}) HAS COMPLETED.");
});
tasks.Add(task);
}
await Task.WhenAll(tasks).ConfigureAwait(false);
var tasks=newlist();
foreach(类型中的变量类型)
{
var task=task.Run(()=>
{
TestTaskAsync(entityType);
OnComplete($“实体({entityType.Id})的处理已完成。”);
});
任务。添加(任务);
}
等待任务.WhenAll(任务).配置等待(false);
这告诉编译器,您不关心等待之后将拥有什么上下文。由于您没有在等待单个任务,因此在等待这些任务之后再担心上下文是没有意义的。您将只等待代表所有任务的任务,即task.whalll
返回的任务
我还冒昧地把续集放在回调中。如果您出于任何原因不想这样做,请随意按照您在问题中的方式进行拆分,它将以相同的方式工作。Configure await不会更改任务本身的任何属性,它只会告诉编译器您在等待任务后是否关心当前上下文。所以
var task = Task.Delay(1000);
// ...
await task.ConfigureAwait(false);
与相同
var task = Task.Delay(1000).ConfigureAwait(false);
// ...
await task;
在您的特定情况下,为您实际上不打算等待的任务配置等待是没有意义的。你应该把它们聚合起来,一起等待它们
你可能想做的是
var tasks = new List<Task>();
foreach (var type in types)
{
var task = Task.Run(() =>
{
TestTaskAsync(entityType);
OnComplete($"PROCESSING FOR ENTITY ({entityType.Id}) HAS COMPLETED.");
});
tasks.Add(task);
}
await Task.WhenAll(tasks).ConfigureAwait(false);
var tasks=newlist();
foreach(类型中的变量类型)
{
var task=task.Run(()=>
{
TestTaskAsync(entityType);
OnComplete($“实体({entityType.Id})的处理已完成。”);
});
任务。添加(任务);
}
等待任务.WhenAll(任务).配置等待(false);
这告诉编译器,您不关心等待之后将拥有什么上下文。由于您没有在等待单个任务,因此在等待这些任务之后再担心上下文是没有意义的。您将只等待代表所有任务的任务,即task.whalll
返回的任务
我还冒昧地把续集放在回调中。如果您出于任何原因不想这样做,请随意按照您在问题中的方式进行拆分,它将以相同的方式工作。当您使用“ConfigureWait(false)”时,它不再返回任务对象,而是返回一个ConfiguredTaskAwaitable对象。当您使用“ConfigureWait(false)”时,它不再返回任务对象,相反,它返回一个ConfiguredTaskAwaitable对象。