后台工作人员中的取消令牌来自哪里?
Where does the cancellation token come from in a background worker?
我正在使用背景,但默认情况下我有这两种方法:
public override async Task StartAsync(CancellationToken cancellationToken)
{
}
public override async Task StopAsync(CancellationToken cancellationToken)
{
}
我有另一种方法可以做某事,如果出现错误,我想停止服务。
private MyMethod()
{
//do something
if(some error)
{
StopAsync(???)
}
}
但我的疑问是我必须使用哪个取消标记作为参数,因为我不知道何时调用 StartAsync() 和 StopAsync() 方法,而且我不知道取消标记是否是当它们被调用时是同一个对象或者它们是不同的对象。
如果是同一个方法,当我尝试调用 StopAsync() 方法时,我在哪里可以找到这个方法用作参数?
总而言之,我想知道在出现问题时停止服务的最佳方式是什么,我决定停止它。
谢谢。
取消令牌仅用于取消异步操作 (Task
)。仅此而已。
因此,如果您希望能够取消已启动的操作,假设 StopAsync
您只需创建 CancellationTokenSource
并将其 属性 Token
传递给一个方法,然后如果需要取消该操作,您只需调用 Cancel
方法,这将取消 StopAsync
。它只是关于取消特定操作。
如果你不想有这种可能性,就把default
传过去:)
我正在使用背景,但默认情况下我有这两种方法:
public override async Task StartAsync(CancellationToken cancellationToken)
{
}
public override async Task StopAsync(CancellationToken cancellationToken)
{
}
我有另一种方法可以做某事,如果出现错误,我想停止服务。
private MyMethod()
{
//do something
if(some error)
{
StopAsync(???)
}
}
但我的疑问是我必须使用哪个取消标记作为参数,因为我不知道何时调用 StartAsync() 和 StopAsync() 方法,而且我不知道取消标记是否是当它们被调用时是同一个对象或者它们是不同的对象。
如果是同一个方法,当我尝试调用 StopAsync() 方法时,我在哪里可以找到这个方法用作参数?
总而言之,我想知道在出现问题时停止服务的最佳方式是什么,我决定停止它。
谢谢。
取消令牌仅用于取消异步操作 (Task
)。仅此而已。
因此,如果您希望能够取消已启动的操作,假设 StopAsync
您只需创建 CancellationTokenSource
并将其 属性 Token
传递给一个方法,然后如果需要取消该操作,您只需调用 Cancel
方法,这将取消 StopAsync
。它只是关于取消特定操作。
如果你不想有这种可能性,就把default
传过去:)