Я написал windows сервис. Ниже приведены глобальные переменные, определенные внутри класса:
private static TimeSpan pollingInterval;
private static Thread regenerationThread;
private static ManualResetEvent quitThreadEvent;
private static ConcurrentQueue<KeyValuePair<string, string>> queue = new ConcurrentQueue<KeyValuePair<string, string>>();
Вот метод запуска службы:
internal static void Start()
{
pollingInterval = TimeSpan.FromSeconds(100);
quitThreadEvent = new ManualResetEvent(false);
regenerationThread = new Thread(doStart);
regenerationThread.Start();
}
Вот метод doStart, упомянутый выше:
internal static void doStart()
{
queue.Enqueue(new KeyValuePair<string, string>("user1", "password1"));
queue.Enqueue(new KeyValuePair<string, string>("user2", "password2"));
queue.Enqueue(new KeyValuePair<string, string>("user3", "password3"));
while (!quitThreadEvent.WaitOne(pollingInterval))
{
// tempList isn't empty, I checked it putting logs here.
if (tempList.Length != 0)
{
var temp = new KeyValuePair<string, string>();
if (queue.TryDequeue(out temp))
{
string username = temp.Key;
string password = temp.Value;
// Method comes till here but doesn't execute the statement below and directly reach to end WriteToFile method.
Task.Run(async () =>
{
await tempFunc(username, password);
queue.Enqueue(new KeyValuePair<string, string>(username, password));
});
}
}
WriteToFile("End of Method");
}
}
Я не уверен, почему Task.Run
не работает. Я поставил логи, но они не показывают никаких ошибок. Я попытался поместить журналы в Task.run
, но он не показывает эти журналы. Является ли причиной того, что я запускаю поток, а затем вызываю Task.run
внутри него?