c# - 如何判断失败的方法调用参数值?

标签 c# asynchronous async-await task

我有一个 List<Task<searchDataResponse>>其中包含大约 30 个条目。调试此列表时,我无法确定 30 个条目中的哪一个是特定条目。

如何确定任务集合中特定任务的方法调用(包括输入参数值)?

示例代码:

var tasks = new List<Task<searchDataResponse>>();

for (var i = 0; i < 30; i++)
{
    // GET DATE OF N DAYS PAST (UP TO 30)
    var searchDate = DateTime.Now.AddDays(i * -1);

    // CALL WEB SERVICE WITH A SPECIFIC DATE
    var dateSpecificTask = wsClient.searchDataAsync(searchDate);

    // ADD TASK TO LIST OF TASKS
    tasks.Add(dateSpecificTask);
}

try
{
    Task.WaitAll(tasks.ToArray());
}
catch (AggregateException ae)
{
    // SET ALL EXCEPTIONS AS HANDLED
    ae.Handle(x => { return true; }); 
}

// GET LIST OF FAILED TASKS
var failedTasks = tasks.Where(x => x.Status == TaskStatus.Faulted).ToList();

// IDENTIFY FAILED TASKS - TRY TO IDENTIFY WHICH DATE SUPPLIED TO WEB SERVICE FAILED.
foreach (var failedTask in failedTasks)
{
    var failedMethod = failedTask.MethodSignature;   //<----  here is what i want to do.  Property 'MethodSignature' does not exist - this is merely an example of what I am attempting to do.
}

更新 - 一些评论表明人们对使用短语 Method Signature 感到胃灼热。我所说的方法签名实际上是方法签名包括输入参数值。因此,我更改了问题标题以更准确地反射(reflect)我正在寻找的内容。我的例子很简单。它不反射(reflect)我的现实问题。但我的问题仍然存在——在查看失败任务列表时,我如何确定作为任务一部分调用的实际方法。我似乎找不到描述导致失败的方法的任务的任何属性。

最佳答案

var operations = Enumerable.Range(0, 30)
 .Select(i => {
     // GET DATE OF N DAYS PAST (UP TO 30)
    var searchDate = DateTime.Now.AddDays(i * -1);

    // CALL WEB SERVICE WITH A SPECIFIC DATE
    var dateSpecificTask = wsClient.searchDataAsync(searchDate);

    return new { i, searchDate, dateSpecificTask };
}.ToList();

Task.WaitAll(operations.ConvertAll(x => x.dateSpecificTask));

var failed = operation.Where(x => x.dateSpecificTask.State == Faulted).ToList();

failed 列表中,您现在拥有所有日期和索引。

关于c# - 如何判断失败的方法调用参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40005079/

相关文章:

c# - 管道,多路复用和无界缓冲

javascript - 如何在页面加载时从 React js 中的 Api 调用填充选择选项

javascript - AWS - Lambda 函数不等待等待

flutter - 什么时候需要将异步函数的返回类型声明为 future 对象?

javascript - 如何在异步方法中使用await内部await并在最后返回结果?

使用调试器时更改的 C# 变量内容

c# - 如何重构对服务层的 RIA 数据服务调用?

c# - 如何将特定操作传递给 View 模型以在按下按钮时执行?

C# Result 和 ContinueWith 之间的区别

javascript - 为什么我的异步 Jest 测试没有在应该失败的时候失败?