Этот пример "терпит неудачу":
static async void Main(string[] args)
{
try
{
await TaskEx.Run(() => { throw new Exception("failure"); });
}
catch (Exception)
{
throw new Exception("success");
}
}
То есть всплывает исключение с текстом "отказ".
Затем я попробовал этот обходной путь:
static async void Main(string[] args)
{
try
{
await SafeRun(() => { throw new Exception("failure"); });
}
catch (Exception)
{
throw new Exception("success");
}
}
static async Task SafeRun(Action action)
{
var ex = default(Exception);
await TaskEx.Run(() =>
{
try
{
action();
}
catch (Exception _)
{
ex = _;
}
});
if (ex != default(Exception))
throw ex;
}
Это тоже не помогло.
Я полагаю, что моя установка обновления Async CTP могла быть закрыта.
Должен ли этот код работать так, как я ожидал («успех» всплывает, а не «сбой»), или это не «предполагается» работать таким образом. А если нет, как бы вы обошли его?