【发布时间】:2017-10-25 15:28:14
【问题描述】:
我正在使用 Grpc 取消长时间运行的操作。我已经设置好,当服务器收到“取消”命令时,它会向SyncEnd 任务注册一个任务,以便在长时间运行的操作实际上时返回一个答案取消。
有没有办法让这个事件处理程序在工作完成后自行注销?如果不是,服务器崩溃是因为任务已经完成,或者我需要将事件作为“SyncEnd”事件的最后一个操作取消(我不确定这是一个好主意......我不'真的不想每次触发事件时都必须重新注册事件)
我现在拥有的:
public override Task<CancelConfirm> CancelSync(CancelRequest request, ServerCallContext context)
{
var tcs = new TaskCompletionSource<CancelConfirm>();
Program.MyClass.SyncEnd += (sender, eventArgs) =>
{
tcs.SetResult(new CancelConfirm { Cancelled = true });
};
Program.MyClass.Cancel();
return tcs.Task;
}
【问题讨论】:
-
+=订阅,-=取消订阅? -
@blaze_125 我会在
-=的右边放什么?这难道不会在事件有机会触发之前取消注册吗? -
是的,它会取消注册,但您只能在事件完成后运行该行。