Запустите две асинхронные задачи параллельно и соберите результаты в .NET 4.5
Я некоторое время пытался получить что-то, что, как мне показалось, было бы просто работать с .NET 4.5
Я хочу запустить две длительные задачи одновременно и собрать
результаты в лучшем C # 4.5 (RTM) способ
Следующее работает, но мне это не нравится, потому что:
I wantSleep
to be an async method so it can await
other methods
It just looks clumsy with Task.Run()
I don't think this is even using any new language features at all!
Working code:
public static void Go()
{
Console.WriteLine("Starting");
var task1 = Task.Run(() => Sleep(5000));
var task2 = Task.Run(() => Sleep(3000));
int totalSlept = task1.Result + task2.Result;
Console.WriteLine("Slept for a total of " + totalSlept + " ms");
}
private static int Sleep(int ms)
{
Console.WriteLine("Sleeping for " + ms);
Thread.Sleep(ms);
Console.WriteLine("Sleeping for " + ms + " FINISHED");
return ms;
}
Non working code:
Update: This actually works and is the correct way to do it, the only problem is the Thread.Sleep
Этот код не работает, потому что вызовSleep(5000)
немедленно запускает задачу, такSleep(1000)
не запускается, пока не завершится. Это правда, хотяSleep
являетсяasync
и я не пользуюсьawait
или звонит.Result
слишком рано
Я думал, может быть, есть способ получить не работаетTask<T>
позвонивasync
метод, чтобы я мог тогда позвонитьStart()
на двух задачах, но я не могу понять, как получитьTask<T>
от вызова асинхронного метода.
public static void Go()
{
Console.WriteLine("Starting");
var task1 = Sleep(5000); // blocks
var task2 = Sleep(1000);
int totalSlept = task1.Result + task2.Result;
Console.WriteLine("Slept for " + totalSlept + " ms");
}
private static async Task<int> Sleep(int ms)
{
Console.WriteLine("Sleeping for " + ms);
Thread.Sleep(ms);
return ms;
}