정말 미학적 인 질문입니다. 각각 다른 지연을 가지고,C# async/작업 완료 대기 중으로 작업 완료 대기
protected override async Task ExecuteAsync(CancellationToken ct)
{
// move the loop here somehow?
await Task.WhenAll(
Task.Run(async() => await this.PollA(ct), ct),
Task.Run(async() => await this.PollB(ct), ct),
Task.Run(async() => await this.PollC(ct), ct))
.ConfigureAwait(false);
}
폴링 방법이 지금과 같이 :
이 코드 ( 폴링 피할 수)을 감안할 때.private async Task Poll(CancellationToken ct)
{
while (!ct.IsCancellationRequested)
{
await Task.Delay(Math.Max(1000, CONFIGA), ct);
this._logger.StartAction("poll A status");
this._logger.StopAction("poll A status");
}
}
이
private async Task Poll(CancellationToken ct)
{
await Task.Delay(Math.Max(1000, CONFIGA), ct);
this._logger.StartAction("poll A status");
this._logger.StopAction("poll A status");
}
이도 올바른 패턴하지 않을 수도 Poll
방법의 각 루프을 제거하는 연속을 구성하는 방법이 있지만,보다 더 나은 것 같다 3 개의 무한 루프가 있습니다.
Task.WhenAny([A,B,C]) =>
// recreate any complete task as soon as it returns
// and await the new "continuation"?
왜 그냥'기다리고 Task.WhenAll (this.PollA (CT), this.PollB (CT), 이 .PollC (ct))'? 그러나 확실히 당신은 'while (! ct.IsCancellationRequested)이 Task.WhenAny (this.PollA (ct), this.PollB (ct), this.PollC (ct))'를 기다리고 있습니다. –