public DataShare( string lookGUID, string lookVersion, string redirectorSrvUri) { InternalState = DataShareInternalState.Worked; LookGUID = lookGUID; LookVersion = lookVersion; DataList = new List <string>(); TaskState = new DataShareTaskState(redirectorSrvUri); cts = new CancellationTokenSource(10 * 60 * 1000); SendingTask = new Task <bool>(() => DataShareTaskCode.TaskProccessData(cts.Token, TaskState), cts.Token); //Task cwt = SendingTask.ContinueWith(task => new Timer(DelayTimerCallback, null, 1 * 1 * 1000, Timeout.Infinite)); }
public static bool TaskProccessData(CancellationToken ct, DataShareTaskState state) { const int redirectorDelayMs = 1 * 1000; const int cloudDelayMs = 1 * 1000; const int redirectorAttemptCount = 1; const int cloudAttemptCount = 1; if (String.IsNullOrEmpty(state.CloudSrvUri)) { for (int i = 0; i < redirectorAttemptCount; i++) { ct.ThrowIfCancellationRequested(); DateTime startTime = DateTime.Now; try { Task <string> redirectorTask = ReadCloudSrvUrl(state.RedirectorSrvUri); redirectorTask.Wait(); state.CloudSrvUri = redirectorTask.Result; break; } catch { if (i == redirectorAttemptCount - 1) { return(false); } TimeSpan timeDiff = DateTime.Now - startTime; int timeDiffMs = (int)timeDiff.TotalMilliseconds; int delay = redirectorDelayMs - timeDiffMs; if (delay > 0) { Thread.Sleep(delay); } } } } for (int i = 0; i < cloudAttemptCount; i++) { DateTime startTime = DateTime.Now; try { ct.ThrowIfCancellationRequested(); Task <bool> cloudTask = SendMessagrToCloudSrvAsync(state.CloudClient, state.CloudSrvUri, state.Message); cloudTask.Wait(); bool cloudResult = cloudTask.Result; //Console.WriteLine("cloudResult: " + cloudResult); return(cloudResult); } catch { if (i == cloudAttemptCount - 1) { return(false); } if (i == 0) { try { Task <string> redirectorTask = ReadCloudSrvUrl(state.RedirectorSrvUri); redirectorTask.Wait(); state.CloudSrvUri = redirectorTask.Result; } catch { } } TimeSpan timeDiff = DateTime.Now - startTime; int timeDiffMs = (int)timeDiff.TotalMilliseconds; int delay = cloudDelayMs - timeDiffMs; if (delay > 0) { Thread.Sleep(delay); } } } return(false); }