【发布时间】:2017-03-09 19:32:56
【问题描述】:
我正在将我现有的工作角色逻辑转移到无状态服务。有一种方法可以使用 Thread.Sleep() 创建定时器功能。从 Stateless Service 的 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;
}
这是正确的,还是我需要将其转换为异步方法?
【问题讨论】:
-
你是什么意思抛出警告?你能把它包括在你的帖子里吗?如果是编译时错误,那么我可以看到的一件事是,在 RunAsync 方法中,返回类型是 Task 但您正在返回 Task
您可以尝试将 Task.FromResult(true) 替换为 Task.Run(() = > {}) -
警告与混合异步和非异步代码有关。 问:您是否使用计时器进行线程处理(这意味着唯一的原因)? 问: ExecuteRepetetiveTask 的签名是什么?真的是任务吗?我认为不会。
标签: c# asynchronous timer azure-service-fabric stateless