gpt4 book ai didi

c# - 如何在 StreamSocket 的 ConnectAsync() 上设置超时值?

转载 作者:行者123 更新时间:2023-11-30 14:10:08 26 4
gpt4 key购买 nike

在 Windows Phone 8.1 应用程序中,我必须按如下方式创建套接字。我如何更改它,以便它在我可以指定的时间段后超时?

_socket = new StreamSocket();
await _socket.ConnectAsync(hostName, port.ToString(), SocketProtectionLevel.PlainSocket);

await _socket.InputStream.ReadAsync(frameLenData, frameLenData.Capacity, Windows.Storage.Streams.InputStreamOptions.None);

在我的 Windows Phone 之前的代码中,我将创建套接字并通过测试 _event.WaitOne(timeout) 来设置超时,例如

timeout = 5000;
_event = new ManualResetEvent(false);
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

bool bOperationFailed = false;
SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
socketEventArg.RemoteEndPoint = new DnsEndPoint(address, port);


_event.Reset();

_socket.ReceiveAsync(socketEventArg);

// Wait for completion
if (_event.WaitOne(timeout) == false)
{
Trace.trace("timed out");
return false;
}

我可以为 StreamSocketConnectAsync() 设置超时时间吗?如果是,怎么办?

最佳答案

使用 CancellationTokenSourceAsTask 扩展方法。

var cts = new CancellationTokenSource();
cts.CancelAfter(2000); // cancel after 2 seconds

var connectAsync = _socket.ConnectAsync( ... );
var connectTask = connectAsync.AsTask(cts.Token);

await connectTask;

关于c# - 如何在 StreamSocket 的 ConnectAsync() 上设置超时值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25500649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com