【发布时间】:2015-01-27 04:15:33
【问题描述】:
我有一种方法可以向我们的客户发送一些短信,如下所示:
public void ProccessSmsQueue()
{
SmsDbContext context = new SmsDbContext();
ISmsProvider provider = new ZenviaProvider();
SmsManager manager = new SmsManager(context, provider);
try
{
manager.ProcessQueue();
}
catch (Exception ex)
{
EventLog.WriteEntry(ex.Message, EventLogEntryType.Error);
}
finally
{
context.Dispose();
}
}
protected override void OnStart(string[] args)
{
Task.Factory.StartNew(DoWork).ContinueWith( ??? )
}
所以,我有一些问题:
我不知道方法运行需要多长时间;
方法可以抛出异常,我想写在EventLog上
我想循环运行此方法,每 10 分钟一次,但仅在最后一次执行完成之后。
我怎样才能做到这一点?我考虑过使用ContinueWith(),但我仍然对如何构建整个逻辑有疑问。
【问题讨论】:
-
你为什么要使用
Task呢?为什么不直接使用Timer? -
使用计时器,我必须在每次触发事件时控制开始和停止。我想过使用这个解决方案,但似乎不是最优雅的。
-
简单地使用循环怎么样?
-
因为它会同步运行。我需要异步/同步的混合。
标签: c# multithreading windows-services task-parallel-library async-await