コード例 #1
0
 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));
 }
コード例 #2
0
ファイル: DataShareTaskCode.cs プロジェクト: helgisol/look
        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);
        }