Re[10]: Как оптимизировать выполнения 10000 параллельных зад
От: LWhisper  
Дата: 06.08.16 01:34
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Очевидно, что рукотворная вечная блокировка потоки в пул не вернет. Асинхронное IO потоки возвращает, ибо блокировка логическая. Т.е. 10000 соединений проблемой не должны быть.

Стоп. Сейчас речь о конкретном решении, предложенном в данной ветке — пакете AsyncEx и реализации AsyncManualResetEvent в нём. Судя по тому, что я вижу — там самая что ни на есть полноценная блокировка, удерживающая поток. Соответственно ни о каком "True Async" не может быть и речи.

Опять же — если вас не затруднит, приведите, пожалуйста, пример логической блокировки, которая возвращает поток в пул, а, после захвата блокировки, продолжает выполнение в новом потоке.

UPD:
На всякий случай переписал создание новой таски с использованием async delegate. Как и ожидалось, это ничего не изменило — несколько тысяч тредов, повисших на блокировке.
Task.Run(async delegate
{
    await Task.Delay(100);
    Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
    lock (_lock)
    {
    }
    await Task.Delay(100);
});
Отредактировано 06.08.2016 1:47 LWhisper . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.