从等待句柄创建一个CancellationToken(或CancellationTokenSource)

时间:2018-07-12 07:57:51

标签: c# asynchronous remoting

我们正在尝试从两个进程中同步一个取消请求,即它们之间的通信是使用管道和远程处理完成的。

我们希望如果一个人具有取消(使用取消令牌)的调用方法(在第一个进程中),我们还希望取消在第二个进程中运行的方法。

由于waitHandle可以全局设置,因此可以从其他进程访问它,我想我应该使用它,像这样:

// 1st process calling function:
var eventId = @"Global\" + Guid.NewGuid().ToString().ToUpperInvariant();
using (var waitHandle = new EventWaitHandle(false, EventResetMode.ManualReset, eventId, out _, eventSecurity))
{
    cancellationToken.Register(() => CancelWork(eventId));
    //remoting job here 
}

private void CancelWork(string eventId)
{
    try
    {
        using (var handle = EventWaitHandle.OpenExisting(eventId))
        {
            handle.Set();
        }
    }
    catch (Exception e)
    {
        Log.Logger.Warn(e, $"Unable to signal event [{eventId}]");
    }
}

是否可以创建一个取消令牌,该令牌将在MRE被选中时取消?

0 个答案:

没有答案