Почему я не могу поймать Abandonedmutexexception после задачиC#

Место общения программистов C#
Anonymous
 Почему я не могу поймать Abandonedmutexexception после задачи

Сообщение Anonymous »

Я ожидал запустить AbandonedMutexException После задачи, которая не выпускает Mutex, программа застряла, когда Waitone после задачи:

Код: Выделить всё

Mutex mutex = new();

BankAccount account = new();

var task = Task.Run(() =>
{
bool locked = false;
try
{
locked = mutex.WaitOne();
if (locked) account.Deposit(100);
}
finally
{
// if (locked) mutex.ReleaseMutex();
}
});

task.Wait();

try
{
_ = mutex.WaitOne(); // it waits here forever
}
catch (AbandonedMutexException)
{
Console.WriteLine($"{nameof(AbandonedMutexException)} was thrown");
}

public class BankAccount
{
public int Balance { get; private set; }
public void Deposit(int amount) => Balance += amount;
public void Withdraw(int amount) => Balance -= amount;
}
Однако его можно поймать после потока :
Mutex mutex = new();

BankAccount account = new();

new Thread(() =>
{
bool locked = false;
try
{
locked = mutex.WaitOne();
if (locked) account.Deposit(100);
}
finally
{
// if (locked) mutex.ReleaseMutex();
}
}).Start();

Thread.Sleep(1000);

try
{
_ = mutex.WaitOne();
}
catch (AbandonedMutexException)
{
// caught successfully
Console.WriteLine($"{nameof(AbandonedMutexException)} was thrown");
}
< /code>
Что вызывает такую ​​разницу? Разве задача не обертка для потока?


Подробнее здесь: https://stackoverflow.com/questions/794 ... ter-a-task

Вернуться в «C#»