【发布时间】:2016-03-27 01:37:47
【问题描述】:
我有如下所示的代码。在每个 Task 函数中,我将一个对对象的引用传递给可以记录任务中发生的任何异常的对象。我想要的是无论是否发生异常,我的列表中的每个任务都要执行(因为我已经在函数中记录了异常。)所以我想要的是 lobj_CustomFieldsTasks 任务列表中的所有任务要执行无论他们中的任何一个遇到异常。有什么建议?
注意:此代码无法复制和工作 - 它是我正在尝试做的事情的摘要。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace LANrevTargetBL
{
public class myEventArgs : EventArgs
{
public eAPIFunction CompletedProcessName { get; set; }
public List<Exception> AsyncErrors { get; set; }
}
/// <summary>
/// Class for Devices. Used for Applying and Removing profiles
/// </summary>
public class DevicesVM
{
private async Task LoadCustomFieldsAndServerProfiles(myEventArgs pobj_myEventArgs)
{
List<Task> lobj_CustomFieldsTasks;
lobj_CustomFieldsTasks = new List<Task>();
// The iobj_AllDevices list is defined as a List<Device> where Device is a custom data class I have
foreach (Device lobj_Device in iobj_AllDevices)
{
lobj_CustomFieldsTasks.Add(MakeCustomFieldCall(lobj_Device.ID, pobj_myEventArgs));
}
try
{
await Task.WhenAll(lobj_CustomFieldsTasks);
}
catch (Exception ex)
{
pobj_myEventArgs.AsyncErrors.Add(ex);
}
}
private async Task MakeCustomFieldCall(int pi_DeviceID, myEventArgs pobj_myEventArgs1)
{
string ls_WorkRoomList;
Device lobj_Device;
APICallHelper lobj_APICallHelper;
CustomFieldMetaData.RootObject lobj_CustomFieldResult;
try
{
lobj_APICallHelper = new APICallHelper();
var lobj_ReturnTask = await lobj_APICallHelper.MakeAPICall(eAPIFunction.eCustomFields, "", pi_DeviceID.ToString());
if (lobj_ReturnTask.Exceptions == null)
{
if (iobj_AllDevices != null)
{
lobj_Device = (from lobj_FoundItem in iobj_AllDevices
where lobj_FoundItem.ID == pi_DeviceID
select lobj_FoundItem).ElementAt(0);
}
}
else
{
foreach (Exception lobj_Exception in lobj_ReturnTask.Exceptions)
{
pobj_myEventArgs1.AsyncErrors.Add(lobj_Exception);
}
}
}
catch (Exception ex)
{
pobj_myEventArgs1.AsyncErrors.Add(ex);
}
}
}
}
【问题讨论】:
标签: c# exception-handling async-await task-parallel-library