От: | Serginio1 | https://habrahabr.ru/users/serginio1/topics/ | |
Дата: | 24.12.16 19:39 | ||
Оценка: | +1 |
S>Код await RunAsync().Wait(); именно это и делает — блокирует все доступные потоки (их одна штука). Вот тебе другой пример того же поведения:S>проблема там не в ConfigureAwait(), а в исчерпании потоков, доступных для запуска продолжений
S>using System;
S>using System.Threading;
S>using System.Threading.Tasks;
S>namespace ConsoleApp3
S>{
S> class Program
S> {
S> static void Main(string[] args)
S> {
S> ThreadPool.SetMinThreads(1, 1);
S> ThreadPool.SetMaxThreads(8, 8);
S> // ...
S> RunAsync(10).Wait();
S> Console.WriteLine(total);
S> }
S> private static volatile int total = 0;
S> private static async Task RunAsync(int i)
S> {
S> if (i == 0)
S> return;
S> Console.WriteLine(i);
S> await Task.Delay(1).ConfigureAwait(false);
S> RunAsync(i - 1).Wait();
S> Interlocked.Increment(ref total);
S> }
S> }
S>}
S>
await RunAsync(i - 1).Wait;
delegate void AddTextToTListBox(string text);
void msg_OnSendChatMessage(string message)
{
if (listBox1.InvokeRequired)
{
AddTextToTextBox d = new AddTextToTextBox(msg_OnSendChatMessage);
this.Invoke(d, new object[] { message });
}
else
{
listBox1.Text += message + "\r\n";
}
}