相关疑难解决方法(0)

阻止visual studio在任务中打破异常

我有以下代码:

Task load = Task.Factory.StartNew(() => {//Some Stuff Which Throws an Exception});

try
{
    load.Wait();
}
catch (AggregateException ex)
{
    MessageBox.Show("Error!");
}
Run Code Online (Sandbox Code Playgroud)

当任务中抛出一个异常时,我希望它在try catch中被冒泡,而不是在导致异常的时候打破visual studio.

我尝试谷歌和一些建议我[DebuggerHidden]在我的方法之上添加它但它不起作用

c# debugging visual-studio-2010 visual-studio-debugging

15
推荐指数
2
解决办法
8499
查看次数

为什么不抛出这个异常?

我有时会使用一组任务,为了确保它们都在等待我使用这种方法:

public async Task ReleaseAsync(params Task[] TaskArray)
{
  var tasks = new HashSet<Task>(TaskArray);
  while (tasks.Any()) tasks.Remove(await Task.WhenAny(tasks));
}
Run Code Online (Sandbox Code Playgroud)

然后像这样调用它:

await ReleaseAsync(task1, task2, task3);
//or
await ReleaseAsync(tasks.ToArray());
Run Code Online (Sandbox Code Playgroud)

但是,最近我注意到了一些奇怪的行为,并设置了ReleaseAsync方法是否存在问题.我设法将它缩小到这个简单的演示,如果你包含它,它将在linqpad中运行System.Threading.Tasks.它也可以在控制台应用程序或asp.net mvc控制器中稍作修改.

async void Main()
{
 Task[] TaskArray = new Task[]{run()};
 var tasks = new HashSet<Task>(TaskArray);
 while (tasks.Any<Task>()) tasks.Remove(await Task.WhenAny(tasks));
}

public async Task<int> run()
{
 return await Task.Run(() => {
  Console.WriteLine("started");
  throw new Exception("broke");
  Console.WriteLine("complete");
  return 5;
 });
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么异常永远不会出现在任何地方.我想如果等待具有异常的任务,它就会抛出.我能够通过用这样的简单替换while循环来确认这一点:

foreach( var task in TaskArray )
{
  await task;//this will throw …
Run Code Online (Sandbox Code Playgroud)

.net c# exception task async-await

8
推荐指数
2
解决办法
1838
查看次数