У меня есть две почти идентичные функции Sync и Async: < /p>
Код: Выделить всё
private static void runLong(int id)
{
Console.WriteLine("starting " + id );
Thread.Sleep(myRandom.Next(200,1000));
Console.WriteLine("-exiting " + id);
}
private static async Task runLongAsync(int id)
{
Console.WriteLine("starting " + id );
await Task.Run(()=>Thread.Sleep(myRandom.Next(200,1000)));
Console.WriteLine("-exiting " + id );
}
< /code>
Я называю их очень похожим образом: < /p>
public static void run()
{
run().Wait();
runAsync().Wait();
}
private static async Task run()
{
List runningTasks = new List();
for (int i = 0; i < 5; i++)
{
runningTasks.Add(Task.Run(() => runLong(i)));
}
await Task.WhenAll(runningTasks);
}
private static async Task runAsync()
{
List runningTasks = new List();
for (int i = 0; i < 5; i++)
{
runningTasks.Add(runLongAsync(i));
}
await Task.WhenAll(runningTasks);
}
Calling synchronous function asynchronously
[*]starting 5
[*]starting 5
[*]starting 5
[*]starting 5
[*]starting 5
[*]exiting 5 < /li>
Выход 5 < /li>
Выход 5 < /li>
Выход 5 < /li>
Выход 5 < /li>
< /ul>
Название асинхрозной функции: < /p>
1
[*] Начало 2
[*] Начало 3
[*] Начало 4
[*] Выход 0
[*] Выход 3
[*] exting 2
[*] exting 1 /> < /ul>
i.e. В первом случае параметры перезаписаны, но во втором- это не так. Что здесь происходит? для петли, которые ведут себя по -разному
Подробнее здесь: https://stackoverflow.com/questions/496 ... -functions
Мобильная версия