Комментарии 8
Как в телесериалах -- первая серия заканчивается на самом интересном месте...
Когда вторая часть?
"SynchronizationContext and ConfigureAwait", как всегда ждем-с.
Это реальная возможность, которую легко воспроизвести. Попробуйте эту программу на .NET Core:
Пропущенный код
using System.Net;
using System.Net.Sockets;
using Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listener.Bind(new IPEndPoint(IPAddress.Loopback, 0));
listener.Listen();
using Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client.Connect(listener.LocalEndPoint!);
using Socket server = listener.Accept();
_ = server.SendAsync(new byte[100_000]);
var mres = new ManualResetEventSlim();
byte[] buffer = new byte[1];
var stream = new NetworkStream(client);
void ReadAgain()
{
stream.BeginRead(buffer, 0, 1, iar =>
{
if (stream.EndRead(iar) != 0)
{
ReadAgain(); // uh oh!
}
else
{
mres.Set();
}
}, null);
};
ReadAgain();
mres.Wait();
Если кто, как и я, ищет ссылку на оригинал, держите https://devblogs.microsoft.com/dotnet/how-async-await-really-works/
А зачем искать ссылку на оригинал, если хабр требует указать её в шапке поста, когда выбираешь перевод?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Как на самом деле работает Async/Await в C# (Часть 1)