// ReSharper disable FunctionNeverReturns private async Task <BasicOperationResponse> SyncWorkerAsync(EmptyOperationRequest request, ComponentOperationContext context) { // wait for initialization of app components await Task.Delay(StartDelay); while (true) { while (!HasNextSyncTimeCome()) { await Task.Delay(NextSyncTimeCheckInterval); } try { // todo: check internet presence (via some component) var isAdditionalSyncRequired = await SyncAsync(); while (isAdditionalSyncRequired) { isAdditionalSyncRequired = await SyncAsync(); } _isPreviousSyncFailed = false; } catch (Exception ex) { // to avoid generation of tons of messages because of internet/algorithm problems if (!_isPreviousSyncFailed) { context.Log.Error(LogContextEnum.Communication, $"'{nameof(ServerSyncService)}' sync iteration failed.", ex); } _isPreviousSyncFailed = true; } SetNextSyncTime(DateTime.Now + SyncInterval); } }
private Task <BasicOperationResponse> ScheduleImmediateSyncAsync(EmptyOperationRequest request, ComponentOperationContext operationContext) { SetNextSyncTime(DateTime.Now); return(Task.FromResult(BasicOperationResponse.GetSuccess())); }