我目前正在嘗試使用System.Threading.Timer
來爲我當前的類啓用回調。我現在的階級是這樣的:在不使用私有成員的情況下保持System.Threading.Timer存活
public class TestClass
{
private Timer _timer;
public TestClass()
{
_timer = new Timer(Callback, TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5));
}
private void Callback(object state)
{
//Do stuff here
}
}
這種重視Timer
到TestClass中,並防止垃圾收集。什麼我注意到雖然是ReSharper的喜歡母狗和呻吟說_timer沒有被使用:
現在,雖然我可以通過_timer上面加了// ReSharper disable once NotAccessedField.Local
禁用此警告,這是推薦進場?
我試過GC.KeepAlive(timer)
而不是添加一個隱式引用,但似乎並沒有做任何事情。有沒有辦法告訴垃圾收集器保持計時器活着只要TestClass活着(沒有ReSharper母狗)?
有很多方法。例如,您是否嘗試將參考存儲在數組或列表中?然後數組或列表將被使用(因爲你把東西放在裏面)。但是,僅僅禁用該局部變量的警告有什麼不對? (注意:'GC.KeepAlive()'僅適用於使用它的方法。)您也可以使用其他計時器類之一,這不需要您保留引用。甚至,停止使用定時器對象,因爲使用'Task.Delay()'和'async' /'await',大多數情況下你不需要它們。從字面上看,你的問題有許多可能的答案。 –
似乎是使用它的正確方法https://blog.stephencleary.com/2011/07/systemthreadingtimer-constructor-and.html –