Я надеюсь получить некоторые мнения о добавлении устойчивости к части, над которой я работаю, которая включает в себя создание нескольких TcpClient
соединений асинхронно с различными серверами и после успешного установления TCP-соединений, а затем сохранение TcpClient
в виде коллекции (просто выдержка из требования)
Это то, что я имею до сих пор:
internal class Program
{
private static readonly TcpClient _client = new TcpClient(AddressFamily.InterNetwork);
private static SslStream _stream;
private static async Task Main(string[] args)
{
var timeoutTask = Task.Delay(5000);
var connectTask = _client.ConnectAsync("10.14.16.24", 56564);
var completedTask = await Task.WhenAny(timeoutTask, connectTask);
if (completedTask == timeoutTask)
_client.Dispose();
try
{
await connectTask;
_stream = new SslStream(_client.GetStream(), false);
}
catch (SocketException e)
{
Console.WriteLine(e.Message);
}
}
}
Вопрос :
В случае тайм-аута состояние connectTask
остается равным "WaitingForActivation
", пока метод ConnectAsync
не вернет либо Faulted
, либо RanToCompletion
. Как отменить эту задачу, зная, что ConnectAsync
не поддерживает CancellationToken
Любые предложения или улучшения приветствуются.
Спасибо