Вот одна из возможных реализаций, при условии, что вы хотите StartClient
для всех ботов последовательно, а затем вызвать setConnection
и await
их всех для завершения.
public async Task RunAsync(Dictionary<int, Robots> botList)
{
this.botList = botList;
var tasks = new List<Task>();
foreach(var botKvp in botList)
{
var bot = botKvp.Value;
bot.proc = await bot.c.StartClient();
tasks.Add(bot.c.setConnection());
}
await Task.WhenAll(tasks);
Form1.Log("All done");
}
Task
выпускается в двух вариантах: Task
и Task<T>
. У вас есть массив Task
, который не определяет возвращаемое значение. Если вы хотите вернуть значение, вам нужно await
a Task<T>
. Например, если setConnection()
должен вернуть bool
, тогда его подпись должна объявить, что public Task<bool> setConnection(...)
Task[] tasks = new Task<Process>[botList.Count]
должно быть
Task<Process>[] tasks = new Task<Process>[botList.Count]
Это работает
bot.proc = await bot.c.StartClient();
Becuase StartClient()
возвращает Task<Process>
, а await
ожидает этой задачи и назначает процесс proc
. В качестве встречного примера это не удастся:
Task procTask = bot.c.StartClient();
bot.proc = await procTask