我将现有的工作人员角色逻辑移到无状态服务中。有一个使用Thread.Sleep()创建计时器功能的方法。当从无状态服务的RunAsync方法调用此方法时,它将引发一个警告。
protected override Task RunAsync(CancellationToken cancellationToken)
{
_backgroundService.Start();
if (cancellationToken.IsCancellationRequested)
{
_backgroundService.Stop();
cancellationToken.ThrowIfCancellationRequested();
}
return Task.FromResult(true);
}计时器方法如下所示。
public void Start()
{
_isStopping = false;
while (!_isStopping)
{
try
{
ExecuteRepetitiveTask();
Thread.Sleep(repeatDelaySeconds);
}
catch (Exception e)
{
Thread.Sleep(1000);
}
}
_isStopping = false;
_hasStopped = true;
}这是正确的,还是需要将其转换为异步方法?
发布于 2016-10-28 23:12:37
这是因为RunAsync目前期望您的重写执行任务返回的异步工作。如果您运行纯同步代码(如Thread.Sleep ),它将阻止底层状态机完成服务副本/实例的角色更改或打开,这是错误的,这就是您看到警告的原因。我们将在即将发布的版本中修复这个问题,这样不管您的代码是否是异步的,它都“只起作用”,但目前,只需将同步工作包装在Task.Run()中即可。
https://stackoverflow.com/questions/40279131
复制相似问题