protected void OnFileWatcherError(ErrorEventArgs args)
{
if (Interlocked.CompareExchange(ref _recovering, 1, 0) != 0)
{
return;
}
string errorMessage = args.GetException()?.Message ?? "Unknown";
Trace($"Failure detected '{errorMessage}'. Initiating recovery...", TraceLevel.Warning);
Recover().ContinueWith(t =>
{
if (t.IsFaulted || t.IsCanceled)
{
t.Exception?.Handle(e => true);
Trace($"Recovery process aborted.", TraceLevel.Error);
}
else
{
Trace("File watcher recovered.", TraceLevel.Info);
}
Interlocked.Exchange(ref _recovering, 0);
});
}