我的应用需要每200毫秒从基于网络的API下载价格数据。我必须对该价格数据进行一些处理。如果我在一个假想的慢处理器上运行它无法跟上我想知道如何处理它。我可以使用它来处理它吗?
例如。我的同步c#代码看起来像这样;
Stopwatch Stopwatch = new Stopwatch();
while (true)
{
Stopwatch.StartNew();
await GetDataFromApiMethod();
await ProcessDataFromApiMethod();
Stopwatch.Stop();
int Delay = 200 - (int)Stopwatch.ElapsedMilliseconds;
if (Delay < 0)
Debug.WriteLine("Price Scheduler lag->" + Delay + "ms.");
await Task.Delay(Delay);
}
以上的净效果是我得到了滞后。如果处理时间太长,那我就不会每200毫秒获得一次数据。
现在,如果我将上述两个等待的调用异步。当处理器无法跟上时会发生什么? ......怎么会处理它呢?这种问题有一个共同的模式吗?
答案 0 :(得分:-2)
您可以考虑使用BackgroundWorker(https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker(v=vs.110).aspx)
,而不是使用while循环这将在应用程序主线程的单独线程上调用您的API请求,这可能是您提到的“滞后”的来源,特别是如果这是您的UI线程。您可以依靠BackgroundWorker的事件(即RunWorkerCompleted)仅在前一个请求完成后执行另一个请求,而不是每200ms发出一次请求。 (当然,通过检查RunWorkerCompleted事件处理程序中的已用时间,您可以在请求之间始终包含至少200毫秒的延迟)