Мы обсуждали это в комментариях, но, возможно, следующий код дает вам лучшую идею.
public class MyClass
{
public async Task<string> MyMethod()
{
var tasks = new List<Task>();
for (int i = 0; i < 3; i++)
{
string taskType = "Banana"; // should be an array[i]
Type type = Type.GetType("MyService." + taskType);
var method = type.GetMethod("Test");
var result = (Task)method.Invoke(null, null);
tasks.Add(result);
}
await Task.WhenAll(tasks);
var theResult = string.Empty;
foreach(var task in tasks)
{
theResult += (string)task.GetType().GetProperty("Result").GetValue(task);
}
return theResult;
}
}
Я написал это полностью слепым и не смог проверить это - потерпите меня!
Но общая идея заключается в следующем: конкретный асинхронный метод c имеет Task<string>
, но я не смог найти способ вызвать асинхронный c generi c метод. Но так как каждый Task<T>
не является родовым c Task
, мы можем привести его к ожиданию. Дополнительные знания о том, что каждый элемент в tasks
является Task<string>
, позволяют нам получить его свойство Result
посредством отражения.