C#从不同的注入服务构建一个任务列表,并逐一执行它们



所以我想从.NET Core 3.1中不同的注入服务构建一个List<Task<bool>>。这是我的代码:

var tasks = new List<Task<bool>>()
{
subscriptionService.ValidatePurchases(),
serviceTwo.Task(),
serviceThree.TaskTwo()
};
tasks.ForEach(task =>
{
var fieldInfo = typeof(Task).GetField("m_action", BindingFlags.Instance | BindingFlags.NonPublic);
Delegate action = fieldInfo.GetValue(task) as Delegate;
string methodName = action?.Method.Name ?? "null";
try
{
task.Start();
task.Wait();
if (!task.Result)
{
Log.Warning($"Scheduled task: ({methodName}) returned false in TaskRunner.");
}
}
catch (Exception ex)
{
Log.Error(ex, $"Scheduled task: ({methodName}) threw an unhandled exception in TaskRunner.");
}
});

问题是任务会立即执行。在对任务调用Start方法之前,我如何维护一个不执行的列表?

多亏了trashr0x,我找到了解决方案。

var tasks = new List<Func<Task<bool>>>()
{
() => subscriptionService.ValidatePurchases(),
() => serviceTwo.Task()
};
tasks.ForEach(async taskMethod =>
{
try
{
var task = taskMethod();
var result = await task;

if (result) { // do something }
}
catch (Exception ex)
{
// log something
}
});

最新更新