Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “我该怎么做?”;WaitAll“;在多个衍生任务配置上等待任务?_C#_.net - Fatal编程技术网

C# “我该怎么做?”;WaitAll“;在多个衍生任务配置上等待任务?

C# “我该怎么做?”;WaitAll“;在多个衍生任务配置上等待任务?,c#,.net,C#,.net,我有一个C#控制台应用程序,可以生成多个任务线程。我需要等待所有线程完成后才能退出应用程序,否则它会关闭所有线程。如何在配置的taskawaiter上执行“.WaitAll()”(我假设这就是我想要观看的内容) Configure await不会更改任务本身的任何属性,它只是告诉编译器在等待任务后是否关心当前上下文。所以 var task = Task.Delay(1000); // ... await task.ConfigureAwait(false); 与相同 var task = Ta

我有一个C#控制台应用程序,可以生成多个任务线程。我需要等待所有线程完成后才能退出应用程序,否则它会关闭所有线程。如何在配置的taskawaiter上执行“.WaitAll()”(我假设这就是我想要观看的内容)


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对象。