static bool IsLongTaskRunning = false;
static object Sync = new object();
static void StartLongTask() {
lock(Sync) {
if (IsLongTaskRunning) // Предыдущий вызов еще не завершился
return;
IsLongTaskRunning = true;
}
Task.Run(async () => {
Debug.WriteLine("Long task started...");
try
{
await Task.Delay(TimeSpan.FromMinutes(2)); // "Длинный метод" из моей "другой библиотеки"
Debug.WriteLine("Long task done.");
} catch(Exception ex) {
Debug.WriteLine("Long task failed: " + ex);
}
lock(Sync) {
IsLongTaskRunning = false;
}
});
}
try
{
// do my job or throw exception
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}