Я собираюсь использовать службу Windows для периодической отправки сообщений Telegram (каждые две минуты). Моя служба Windows начнет нормально работать, и через 2 минуты она остановится. Я проверил свой код и выяснил, что это из-за асинхронности. Как я могу решить проблему?Как вызвать метод Async изнутри ElapsedEventHandler
protected override void OnStart(string[] args)
{
//< I declared a System.Timers.Timer to send new Telegram messages.
aTimer = new System.Timers.Timer(120000); // 2 minutes
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Enabled = true;
GC.KeepAlive(aTimer);
//>
}
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
SendNewMessages();
}
async static void SendNewMessages()
{
MyDataContext myDB = new MyDataContext();
var newMessages = myDB.TelegramMessages.Where(tm => tm.Status != "New Message");
foreach (TelegramMessage newMessage in newMessages)
{
try
{
var store = new FileSessionStore();
var client = new TelegramClient(store, "MySession");
await client.Connect();
var res = await client.ImportContactByPhoneNumber(newMessage.ReceiverPhoneNumber);
await client.SendMessage(res.Value, newMessage.Message);
newMessage.Status = "Sent";
myDB.SubmitChanges();
}
catch (Exception ex)
{
newMessage.Status = ex.Message;
myDB.SubmitChanges();
}
Thread.Sleep(5000);
}
}
'Я проверил мой код и выяснить, что это из-за async' я сомневаюсь Это. Я рекомендую уменьшить это до минимального воспроизводимого примера, и я подозреваю, что вы обнаружите, что фактическая проблема - это что-то другое. Например, необработанное исключение. –