C# 未在C中处理System.Threading.Tasks.TaskCanceledException#

C# 未在C中处理System.Threading.Tasks.TaskCanceledException#,c#,async-await,C#,Async Await,关闭我使用的环境窗口。退出(0); 我得到的错误如下: System.Threading.Tasks.TaskCanceledException未处理 消息:WindowsBase.dll中出现“System.Threading.Tasks.TaskCanceledException”类型的未处理异常 其他信息:任务已取消 在我关闭窗口之前,是否有方法检查任何任务是否仍在运行 提前谢谢 Joon创建任务时,将其存储在某个位置。如果计划创建多个任务,则可能需要一个集合来存储这些任务。例如,您可以将

关闭我使用的环境窗口。退出(0); 我得到的错误如下:

System.Threading.Tasks.TaskCanceledException未处理 消息:WindowsBase.dll中出现“System.Threading.Tasks.TaskCanceledException”类型的未处理异常 其他信息:任务已取消

在我关闭窗口之前,是否有方法检查任何任务是否仍在运行

提前谢谢


Joon

创建任务时,将其存储在某个位置。如果计划创建多个任务,则可能需要一个集合来存储这些任务。例如,您可以将其存储在ConcurrentBag中,即使您在多个线程上创建任务,这也是安全的

static class Globals
{
    static public ConcurrentBag<Task> RunningTasks { get; } = new ConcurrentBag<Task>();
}

//Main code
var task = Task.Run( () => DoSomethingThatTakesALongTime() );
Globals.RunningTasks.Add(task);

不过,如果可能的话,更好的解决方案是处理异常。

“要关闭窗口,我使用了Environment.Exit(0);”而不是。。。窗户。关上??谢谢。但有没有办法得到所有未完成的任务列表?我在这里得到的例外是来自外部代码,我无法控制。有没有办法抑制它。也许再看一遍?我提供的代码示例包括检测尚未完成的任务的逻辑。我一直在使用许多任务,并将它们全部存储和检查。但我找不到无人看管的。
while (Globals.RunningTasks.Any( t => !t.IsCompleted ))
{
    await Task.Yield();
}
Environment.Exit(0);