我正在使用Windows服务定期检查更新。大概一两分钟。为此,我使用.net 4.6.1与
下面是我的代码
/// <summary>
/// Download updates from server
/// </summary>
/// <returns></returns>
private void DownloadUpdate()
{
try
{
var package = string.Empty;
if (_server != null)
{
timer.Stop();
package = _server.Download();
if (package.Length > 0)
_server.Install(package);
}
}
finally
{
timer.Start();
}
}
/// <summary>
/// To carry out download asynchronous way
/// </summary>
private async void DowloadUpdateAsync()
{
await Task.Run(()=>DownloadUpdate());
}只是想知道,这是否是管理间隔的正确方法。
发布于 2016-12-30 09:41:36
补充了李福的回答:
我建议您在ContinueWith()中启动计时器。
TPL使用垃圾收集器的终结机制来发现何时放弃了失败的任务,从而导致异常为未观察到的。当发生这种情况时,TaskScheduler类将引发它的UnobservedTaskException事件。最好是处理你的异常。这是在使用ContinueWith时的加号。
试着做这样的事情:
Timer timer = new Timer();
public Program()
{
timer.Interval = 5000;
timer.Elapsed += DownloadUpdate;
timer.Enabled = true;
}
private void DownloadUpdate(object sender, ElapsedEventArgs e)
{
Task.Factory.StartNew((Action)DownloadUpdate).ContinueWith(t =>
{
bool shouldTimerStartAgain = true;
if (t.IsFaulted)
{
// handle t.Exception
// Compute if this task need to stop?
// If so set shouldTimerStartAgain = false
}
if (shouldTimerStartAgain)
{
timer.Start();
}
});
}
private void DownloadUpdate()
{
var package = string.Empty;
if (_server != null)
{
timer.Stop();
package = _server.Download();
if (package.Length > 0)
_server.Install(package);
}
}https://stackoverflow.com/questions/41390436
复制相似问题