Khi trình gỡ lỗi được đính kèm vào quy trình .NET, nó (thường) dừng khi một ngoại lệ chưa được giải quyết được ném.Trình gỡ lỗi không vi phạm/dừng các trường hợp ngoại lệ trong phương thức không đồng bộ
Tuy nhiên, điều này dường như không hoạt động khi bạn đang ở phương thức async
.
Các kịch bản tôi đã cố gắng trước khi được liệt kê trong đoạn mã sau:
class Program
{
static void Main()
{
// Debugger stopps correctly
Task.Run(() => SyncOp());
// Debugger doesn't stop
Task.Run(async() => SyncOp());
// Debugger doesn't stop
Task.Run((Func<Task>)AsyncTaskOp);
// Debugger stops on "Wait()" with "AggregateException"
Task.Run(() => AsyncTaskOp().Wait());
// Throws "Exceptions was unhandled by user code" on "await"
Task.Run(() => AsyncVoidOp());
Thread.Sleep(2000);
}
static void SyncOp()
{
throw new Exception("Exception in sync method");
}
async static void AsyncVoidOp()
{
await AsyncTaskOp();
}
async static Task AsyncTaskOp()
{
await Task.Delay(300);
throw new Exception("Exception in async method");
}
}
Tôi có thiếu cái gì? Làm thế nào tôi có thể làm cho trình gỡ lỗi phá vỡ/dừng lại ngoại lệ trong AsyncTaskOp()
?
Bạn đã bao giờ giải quyết này? –
@RichardSzalay Không, rất tiếc là không. Tôi đoán tôi đã quen với việc sống với điều này. –