예제 #1
0
        // 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);
            }
        }
예제 #2
0
        private Task <BasicOperationResponse> ScheduleImmediateSyncAsync(EmptyOperationRequest request, ComponentOperationContext operationContext)
        {
            SetNextSyncTime(DateTime.Now);

            return(Task.FromResult(BasicOperationResponse.GetSuccess()));
        }