Запустите две асинхронные задачи параллельно и собирайте результаты .NET 4.5C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Запустите две асинхронные задачи параллельно и собирайте результаты .NET 4.5

Сообщение Anonymous »

Я некоторое время пытался получить что -то, что я думал, было бы просто работать с .net 4.5 < /p>

Я хочу снять две длинные задачи с той же Время и собирайте

в лучшем случае C# 4.5 (rtm) < /p>

Следующее работает, но мне это не нравится, потому что:


[*] Я хочу сон , чтобы быть асинхронным методом, чтобы он мог ждать Другие методы
[*] Это просто выглядит неуклюже с task.run ()
[*] Я не думаю, что это даже использует какие -либо новые языковые функции!
< /ul>

Рабочий код: < /strong> < /p>

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;
}
< /code>

не работающий код: < /strong> < /p>

Обновление: это действительно работает и Это правильный способ сделать это, единственная проблема - это Thread.sleep

Этот код не работает, потому что вызов (5000) немедленно запускает задачу, работающую, поэтому Sleep (1000) не работает до тех пор, пока не будет завершена. Это верно, даже если Sleep является Async , и я не использую await или вызов .result слишком скоро.

Я подумал, что, может быть, есть способ получить непрерывную задачу , вызывая метод Async , чтобы я мог затем вызовать start () по двум задачам, Но я не могу понять, как получить задачу < /code> от вызова асинхрочного метода. < /p>

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 Sleep(int ms)
{
Console.WriteLine("Sleeping for " + ms);
Thread.Sleep(ms);
return ms;
}


Подробнее здесь: https://stackoverflow.com/questions/123 ... in-net-4-5
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»