Как в переменную записать результат быстрейшего метода(два раза вызывается один метод с разными передаваемыми значениями, нужен результат быстрейшего метода)?
Ответ
Судя по метке, метод у вас асинхронный. В таком случае можно воспользоваться Task.WhenAny()
public async Task
...
var task1 = FooAsync(1);
var task2 = FooAsync(2);
var fastestTask = await Task.WhenAny(task1, task2);
var result = fastestTask.Result;
Однако может так случиться, что какой-либо таск завершится быстрее из-за исключения. В таком случае нужно снова вызвать Task.WhenAny() для оставших тасков. В общем случае решение может выглядеть так:
var task1 = FooAsync(1);
var task2 = FooAsync(2);
var task3 = FooAsync(3);
var tasks = new List
Ждать или отменять оставшиеся таски, если один из них упал -- зависит от задачи. Например, если вы хотите получить цену одной и той же акции из нескольких источников, то даже если один из источников недоступен, вы дождетесь ответа другого источника. В случае если вы хотите получить цену разных акций из одного и того же источника, то, вероятно, имеет смысл отменить оставшиеся таски, поскольку понятно, что если источник недоступен, то остальные задачи тоже упадут.
Комментариев нет:
Отправить комментарий