后台计时器任务.net Web Api和Xamarin表单

时间:2018-07-03 10:32:22

标签: c# asp.net-web-api xamarin.forms

我一直在开发xamarin表单应用程序。该应用程序的主要目的是让用户创建一个倒数计时器,如果用户没有在计时器达到零之前停止计时器,它将向某些号码发送SMS消息。

我正在使用android前台服务启动计时器并显示倒数计时器。它工作正常,但是,此解决方案不是100%可靠的,因为如果由于某种原因在计时器启动后关机,则SMS将不会发送。因此,我想将计时器逻辑移至.Net Web API(我的应用程序已经在使用.Net Web API来实现其他功能),以便当用户启动计时器时,服务器上的Web API会跟踪启动计时器的用户的计时器。

有人可以指导我针对上述情况为Web API实施可靠的解决方案吗?我看过Hangfire和其他计划的任务,例如Windows服务,但是对于看似更简单的任务而言,它们似乎太复杂了。需要通过Web API动态地启动和停止计时器,如果计时器达到零,则需要调用Web API中的“ SendSMS”方法。

2 个答案:

答案 0 :(得分:0)

您可以利用System.Threading.Tasks程序集的优势。像这样

 CancellationTokenSource tokenSource;

        private void CancelSendMessageTask()
        {
            tokenSource?.Cancel();
        }

        private void StartTimer()
        {
            int SecondsToWait = 90;
            tokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(SecondsToWait));

            Task.Delay(TimeSpan.FromSeconds(SecondsToWait), tokenSource.Token).ContinueWith((t) =>
            {
                if (t.IsCanceled) return;
                SendSMS();
            });
        }

答案 1 :(得分:-1)

您可以使用this example或其他类似方式发送短信并在Web服务端实现倒数计时器。

然后,您使用HTTPClient上的Xamarin类来通知Web服务计时器需要启动或停止。

让我知道您是否需要代码示例。