Hi,
Mam bardzo prosty programik, który sporadycznie sprawdza sobie czy jest coś w pliku, a następnie jeżeli jest, to wyświetla to na konsole, dalej wykonuje Task: woła sobie jakieś zewnętrzne API i czyści plik.
Problem jest taki, że działa to OK, ale następnie co kilka godzin ten Task pomimo bycia anulowanym się nadal wykonuje
while (true)
{
if (File.Exists(config.Path))
{
var content = File.ReadAllText(config.Path);
if (content.Length > 0)
{
Console.WriteLine(DateTime.Now);
Console.WriteLine(content);
Console.WriteLine();
Console.WriteLine();
try
{
var api = new SomeAPIWrapper(config);
await api.Call(content);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
File.WriteAllText(config.Path, "");
}
}
else
{
Console.WriteLine($"File does not exists: '{config.Path}'");
}
await Task.Delay(10000);
}
public class SomeAPIWrapper
{
public CancellationTokenSource cancelTokenSource = new CancellationTokenSource();
private readonly Settings _settings;
private SocketClient _client;
public DiscordWrapper(Settings settings)
{
_settings = settings;
}
public async Task Call(string message)
{
_client = new SocketClient();
await _client.LoginAsync(TokenType.Bot, _settings.Token);
await _client.StartAsync();
_client.Ready += () => client_Ready(message);
await Task.Delay(-1, cancelTokenSource.Token);
}
private async Task client_Ready(string message)
{
await _client.SendMessageAsync(message);
Console.WriteLine("WTF?"); // enterprise logging solution
cancelTokenSource.Cancel();
}
}
I ku mojemu zdziwieniu jak zostawiłem to noc, to na konsolce miałem taki output:
24.12.2020 01:15:27
TEST
WTF?
A task was canceled. // i od tego momentu już nie powinno nic się dziać do momentu aż w pliku się coś nie pojawi
WTF? // o 2 w nocy
WTF? // o 5 w nocy
WTF? // o 9 rano
WTF? // o 10 rano
z czego może wynikać ten problem? zgaduję że coś z anulowaniem Taska mogę robić nie tak, ale nadal skąd te dziwne godziny? :O