【发布时间】:2020-09-20 13:03:50
【问题描述】:
我正在尝试使用 TaskCompletionSource 将基于事件的调用包装到任务上,但由于某种原因,这无法按预期工作,当使用 await SendRequest(cmdid, data) 调用 SendRequest 时,无论我多么努力地尝试 SetCanceled,它都不会返回,设置结果等...
为了确保任务在进一步排除故障之前结束,下面我正在尝试使用 CancellationTokenSource,它似乎没有按预期工作,我是否误解了 TaskCompletionSource 和 Cancellation 的概念和用法?
我的理解是,当附加到 tcs 的取消令牌将在 1 秒后过期时,以下代码会引发异常,但不会,await SendRequest(cmdid, data) 会永远阻塞。
public async Task<object> SendRequest(CmdId cmdID, object data)
{
CancellationTokenSource source = new CancellationTokenSource(1000);
TaskCompletionSource<object> tcs = new TaskCompletionSource<object>(source.Token);
Request(cmdID, seqNr, data);
return await tcs.Task;
}
提前感谢您的帮助。
【问题讨论】:
-
你确定不是你的请求方法阻塞了吗?
标签: c# .net async-await