Как через async\await вызвать метод DisconnectAsync и дождаться его завершения у сокета? Этот метод не поддерживает TAP паттерн. Он поддерживает только старые асинхронные паттерны, с которыми я плохо знаком.
DisconnectAsync()
действительно является старым API (EAP, event-based asynchronous pattern) и не поддерживает TAP. Однако, если ознакомиться с документаций по TAP, то можно найти рецепт "преобразования" EAP API в TAP. Для этого нужно воспользоваться классом TaskCompletionSource<T>
.
public static Task DisconnectAsync(this Socket socket, SocketAsyncEventArgs args)
{
// TaskCompletionSource является обобщенным,
// поэтому используем самый "маленький" тип, действительный результат нас не интересует
var tcs = new TaskCompletionSource<byte>();
// подписываемся на завершение операции
args.Completed += (s, e) =>
{
if (e.SocketError == null)
{
// если операция завершилась успешно, устанавливаем результат таску
tcs.SetResult(0);
}
else
{
// иначе устанавливаем исключение
tcs.SetException(new Exception(e.SocketError.ToString()));
}
};
var finished = socket.DisconnectAsync(args);
if (finished)
{
// операция завершилась синхронно, просто выходим
return Task.Completed;
}
return tcs.Task;
}
Использование:
await socket.DisconnectAsync(args);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Прошу пояснить словами что в нем происходит, соответственно для дальнейшего обучения
Есть 5 значений, хранящихся в db - ratecount1, ratecount2, ratecount3, ratecount4, ratecount5На основе этих значений выводится процентное соотношение каждого из значений
Как реализовать наложение переходов в плагине barba js? В примерах на оф сайте, только когда один исчезает, а второй проявляется, а мне нужно что...