【发布时间】:2021-09-01 01:32:03
【问题描述】:
我希望获得一些意见,以增加我正在处理的部分的弹性,该部分涉及异步创建多个 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
欢迎提出任何建议或改进。 谢谢
【问题讨论】:
标签: c# .net-core task tcpclient cancellation-token