相关疑难解决方法(0)

TAP全局异常处理程序

此代码抛出异常.是否可以定义将捕获它的应用程序全局处理程序?

string x = await DoSomethingAsync();
Run Code Online (Sandbox Code Playgroud)

使用.net 4.5/WPF

.net c# exception task-parallel-library async-await

18
推荐指数
1
解决办法
3444
查看次数

如何处理Task.Factory.StartNew异常?

我这里有一些奇怪的问题.任何抛出的异常总是不能独立处理我如何尝试处理它.

我试试这个:

http://msdn.microsoft.com/en-us/library/dd997415%28v=vs.110%29.aspx

private class MyCustomException : Exception
{
     public MyCustomException(String message) : base(message)
     {
     }
}

public static void Main()
{
   var task1 = Task.Factory.StartNew(() =>
   {

      throw new MyCustomException("I'm bad, but not too bad!");
   });

   try
   {
      task1.Wait();
   }
   catch (AggregateException ae)
   {
       // Assume we know what's going on with this particular exception. 
       // Rethrow anything else. AggregateException.Handle provides 
       // another way to express this. See later example. 
       foreach (var e in ae.InnerExceptions)
       {
           if (e is …
Run Code Online (Sandbox Code Playgroud)

c# exception-handling exception task-parallel-library

6
推荐指数
1
解决办法
7445
查看次数

不同类型的 Task.WhenAll

我收到以下代码行的编译器错误:

IEnumerable<IPurchasedItem<IFruit>>[] result = await Task.WhenAll(
                repository1.LoadItems(id),
                repository2.LoadItems(id)
                );
Run Code Online (Sandbox Code Playgroud)

错误 CS0029 无法将类型“void”隐式转换为 System.Collections.Generic.IEnumerable<IPurchasedItem<IFruit>>[]

我的存储库方法如下所示:

public async Task<IEnumerable<IPurchasedItem<Apple>>> LoadItems(int id) {}
public async Task<IEnumerable<IPurchasedItem<Orange>>> LoadItems(int id) {}
Run Code Online (Sandbox Code Playgroud)

...从哪里Apple开始Orange

public interface IPurchasedItem<out T> : where T : IFruit {}
public class Fruit : IFruit {}
public class Apple : Fruit {}
public class Orange : Fruit {}
Run Code Online (Sandbox Code Playgroud)

我已经看过这个问题,但似乎我已经在做建议的事情,即要求而IEnumerable[]不是Task<IEnumerable>[]

我做错了什么 - 如果这不是正确的方法,那么我等待并结合两种LoadItems()方法的结果的最佳方法是什么?我原本打算这样做:

result[0].Concat(result[1])
Run Code Online (Sandbox Code Playgroud)

c# async-await

2
推荐指数
1
解决办法
1363
查看次数

如何使用Task.WhenAny并实现重试

我有一个创建多个基于 I/O 的任务的解决方案,我正在使用 Task.WhenAny() 来管理这些任务。但通常许多任务会由于网络问题或请求限制等而失败。

在使用 Task.WhenAny() 方法时,我似乎找不到使我能够成功重试失败任务的解决方案。

这是我在做什么:

var tasks = new List<Task<MyType>>();
foreach(var item in someCollection)
{
   task.Add(GetSomethingAsync());
}
while (tasks.Count > 0)
{
   var child = await Task.WhenAny(tasks);
   tasks.Remove(child);
   ???
}
Run Code Online (Sandbox Code Playgroud)

所以上述结构适用于完成任务,但我还没有找到处理和重试失败任务的方法。该await Task.WhenAny抛出AggregateException,而不是让我检查任务状态。当在异常处理程序中时,我不再有任何方法重试失败的任务。

c# async-await

2
推荐指数
1
解决办法
1013
查看次数