ユーザのアクティブ/非アクティブステータスを検出するプレゼンスモニタクラスがあります。 「確認」の方法は、すべての1分後に解雇されasyncはタイマーでは動作しません。
public class PresenceMonitor
{
private volatile bool _running;
private Timer _timer;
private readonly TimeSpan _presenceCheckInterval = TimeSpan.FromMinutes(1);
public PresenceMonitor()
{
}
public void Start()
{
// Start the timer
_timer = new Timer(_ =>
{
Check();
}, null, TimeSpan.Zero, _presenceCheckInterval);
}
private void Check()
{
if (_running)
{
return;
}
_running = true;
// Dowork
}
}
:そのクラスは、アプリケーションの起動時に呼び出され、そのStartメソッドでタイマーを持っています。コードのその部分は正常に動作しているが、今の私の「仕事をする」方法が非同期になってきたので、私はこのような何かにこのプレゼンスモニターのクラスを変更しなければならなかった待つ:
public class PresenceMonitor
{
private volatile bool _running;
private Timer _timer;
private readonly TimeSpan _presenceCheckInterval = TimeSpan.FromMinutes(1);
public PresenceMonitor()
{
}
public void Start()
{
// Start the timer
var timer = new System.Threading.Timer(async (e) =>
{
await CheckAsync();
}, null, TimeSpan.Zero, _presenceCheckInterval);
}
private async Task CheckAsync()
{
if (_running)
{
return;
}
_running = true;
// await DoworkAsync
}
}
今一度解雇され残念ながら「CheckAsync」方法毎分の代わりにのみです。あなたは私が非同期と呼ぶためにここで間違っていることを定期的な間隔の後で待っていますか?
同じことを行う正しい方法はありますか?
これが解決しましたか? – Nkosi