Exemple #1
0
        /// <summary>
        /// 异步执行并返回
        /// </summary>
        /// <param name="key"></param>
        /// <param name="msg"></param>
        /// <returns></returns>
        public void PushDelayRun(string key, string msg, string cmd, int delayMinute)
        {
            if (string.IsNullOrEmpty(cmd))
            {
                cmd = key;
            }
            var time     = DateTime.Now.AddMinutes(delayMinute);
            var sencond  = time.Second / 10 * 10;
            var timeKey  = time.ToString("yyyyMMddHHmm") + sencond;
            var innerMsg = new PushMsg
            {
                Key     = key,
                Command = cmd,
                Body    = msg,
                Time    = DateTime.Now,
                IsBack  = false
            };

            Exec(db =>
            {
                db.ListLeftPush(FormatKey(MsgQuoteDelayCommonChannel(timeKey)), innerMsg.ToJson());
            }, 2);
        }
Exemple #2
0
        /// <summary>
        /// 异步执行并返回
        /// </summary>
        /// <param name="key"></param>
        /// <param name="msg"></param>
        /// <returns></returns>
        public Task <ServiceResult <string> > PushRun(string key, string msg, string cmd, bool isBack = false)
        {
            if (string.IsNullOrEmpty(cmd))
            {
                cmd = key;
            }

            var innerMsg = new PushMsg
            {
                Key     = Guid.NewGuid().ToString(),
                Command = cmd,
                Body    = msg,
                Time    = DateTime.Now,
                IsBack  = isBack
            };
            var ts = new TaskCompletionSource <ServiceResult <string> >();

            try
            {
                Exec(db =>
                {
                    db.ListLeftPush(FormatKey(key), innerMsg.ToJson());
                    if (isBack)
                    {
                        var searchLoop = 0;
                        var backKey    = FormatKey($"System:AsyncExcutor_Back:{innerMsg.Key}");
                        while (searchLoop < 100)
                        {
                            if (db.KeyExists(backKey))
                            {
                                var rstMsg = (string)db.StringGet(backKey);
                                Logger?.Write($"excutor msg rst:{rstMsg}");
                                Console.WriteLine(rstMsg);
                                ts.SetResult(rstMsg.ToObject <ServiceResult <string> >());
                                db.KeyDelete(backKey);
                                break;
                            }
                            else
                            {
                                searchLoop++;
                                Thread.Sleep(100);
                            }
                        }
                        if (searchLoop >= 100)
                        {
                            Console.WriteLine("timer out");
                            ts.SetException(new TimeoutException());
                        }
                    }
                    else
                    {
                        ts.SetResult(new ServiceResult <string>(ExecutResultCode.Success));
                    }
                }, 2);
            }
            catch (Exception ex)
            {
                ts.SetException(ex);
            }
            return(ts.Task);
        }