Как в переменную записать результат быстрейшего метода(два раза вызывается один метод с разными передаваемыми значениями, нужен результат быстрейшего метода)?
Судя по метке, метод у вас асинхронный. В таком случае можно воспользоваться Task.WhenAny():
public async Task<int> FooAsync(int x)
{
//...
}
...
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<Task<int>>() { task1, task2, task3 };
int result;
while (tasks.Count > 0)
{
var fastestTask = await Task.WhenAny(tasks);
if (fastestTask.IsCompleted)
{
result = fastestTask.Result;
break;
}
else // если таск упал или был отменен
{
tasks.Remove(fastestTask);
}
}
Ждать или отменять оставшиеся таски, если один из них упал -- зависит от задачи. Например, если вы хотите получить цену одной и той же акции из нескольких источников, то даже если один из источников недоступен, вы дождетесь ответа другого источника. В случае если вы хотите получить цену разных акций из одного и того же источника, то, вероятно, имеет смысл отменить оставшиеся таски, поскольку понятно, что если источник недоступен, то остальные задачи тоже упадут.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости