【发布时间】:2020-02-09 06:45:21
【问题描述】:
var startTimeSpan = TimeSpan.Zero;
var periodTimeSpan = TimeSpan.FromSeconds(5);
var timer = new System.Threading.Timer((e) =>
{
limit = helper.CheckLimit();
}, null, startTimeSpan, periodTimeSpan);
在我的 C# 应用程序中,计时器只能工作 30 次。之后停止。为什么,我不知道。哪里错了?
这是我的 CheckLimit 助手;
public bool CheckLimit()
{
try
{
var queryParams = new NameValueCollection()
{
{ "p", "check_limit" },
};
string response = this.ApiCall(queryParams);
dynamic json_response = JsonConvert.DeserializeObject(response);
if (json_response.success == true)
{
return true;
}
else
{
return false;
}
}
catch (Exception)
{
return false;
}
}
【问题讨论】:
-
可以分享一下周边的代码吗?特别是
helper.CheckLimit() -
我分享了,谢谢。
-
var timer在哪里?以某种方式? -
你是否保持对计时器的引用,以确保它不会被垃圾收集?从文档中:只要您使用 Timer,就必须保留对它的引用。与任何托管对象一样,当没有对 Timer 的引用时,它会受到垃圾回收的影响。计时器仍然处于活动状态这一事实并不能阻止它被收集。
-
你怎么知道定时器已经停止工作了?您是否有一些代码正在检查以确保实际调用了回调?
标签: c# multithreading timer