因此,我在其上
IDisposable创建了一个扩展方法,该方法创建了一个
CancellationToken在超时时处理连接的方法,因此任务完成,一切都继续进行:
public static IDisposable CreateTimeoutScope(this IDisposable disposable, TimeSpan timeSpan){ var cancellationTokenSource = new CancellationTokenSource(timeSpan); var cancellationTokenRegistration = cancellationTokenSource.Token.Register(disposable.Dispose); return new DisposableScope( () => { cancellationTokenRegistration.Dispose(); cancellationTokenSource.Dispose(); disposable.Dispose(); });}而且用法非常简单:
try{ var client = new UdpClient(); using (client.CreateTimeoutScope(TimeSpan.FromSeconds(2))) { var result = await client.ReceiveAsync(); // Handle result }}catch (ObjectDisposedException){ return null;}额外信息:
public sealed class DisposableScope : IDisposable{ private readonly Action _closeScopeAction; public DisposableScope(Action closeScopeAction) { _closeScopeAction = closeScopeAction; } public void Dispose() { _closeScopeAction(); }}


