Передача параметров в асинхронные функции [дублировать]C#

Место общения программистов C#
Ответить
Anonymous
 Передача параметров в асинхронные функции [дублировать]

Сообщение Anonymous »

Извините, если это было задано ранее.
У меня есть две почти идентичные функции 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);
}
However result is different:
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
Ответить

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

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

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

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

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