Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.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# 使用Task.WhenAll()时,如何捕获任务中发生的异常?_C#_.net_Windows Phone 8 - Fatal编程技术网

C# 使用Task.WhenAll()时,如何捕获任务中发生的异常?

C# 使用Task.WhenAll()时,如何捕获任务中发生的异常?,c#,.net,windows-phone-8,C#,.net,Windows Phone 8,我试着在任务周围放置try-catch。whalll(任务),但它什么都没有捕获。在我的一个任务中,我试图通过在空字符串上使用子字符串来人工生成异常。但发生的一切是应用程序崩溃,并默认为应用程序未处理异常 private async void RunTasks() { tasks[0] = HttpExtensions.GetMyData("http://www...."); tasks[1] = HttpExtensions.GetMyDat

我试着在任务周围放置try-catch。whalll(任务),但它什么都没有捕获。在我的一个任务中,我试图通过在空字符串上使用子字符串来人工生成异常。但发生的一切是应用程序崩溃,并默认为应用程序未处理异常

    private async void RunTasks()
    {

        tasks[0] = HttpExtensions.GetMyData("http://www....");

        tasks[1] = HttpExtensions.GetMyData("http://www.....");

        tasks[2] = GeoLocate.OneShotGeoLocate();

        try
        {
            await Task.WhenAll(tasks);
        }
        catch (AggregateException ae)
        {

            App.ViewModel.ErrorMessage = ae.Message;

        }

 }

这要归功于“nakiya”

private async void RunTasks()
{

    tasks[0] = HttpExtensions.GetMyData("http://www....");

    tasks[1] = HttpExtensions.GetMyData("http://www.....");

    tasks[2] = GeoLocate.OneShotGeoLocate();

    try
    {
        await Task.WhenAll(tasks);
    }
    catch (Exception ae)
    {

        App.ViewModel.ErrorMessage = ae.Message;

    }

}
要获取执行任务时引发的所有异常,请使用以下命令:

Task taskReturned = Task.WhenAll(taskArray);
try
{
    await taskReturned;
}
catch
{
    throw taskReturned.Exception;
}

除非这是一个事件处理程序,
RunTasks
是一个事件处理程序,否则永远不要使用
async void
?如果它不是一个事件处理程序,它应该是
异步任务
。这是一个时间问题吗?(即)您是否在代码有机会到达try块之前抛出异常?尝试将
Try
块移动到任务创建之外。您是否尝试捕获
异常
而不是
聚合异常
?哦,它在异常情况下工作!谢谢