0

我在一个 .net 框架项目 MVC 上工作,目前我面临以下问题。

我有一个 API

[HttpGet]
[ActionName("testme")]
public async Task<bool> TestMe()
{
  await AddNoteAsync("Test");
  return true;
}

AddNoteAsync 是:

public static async Task AddNoteAsync(string note)
{
  try
  {  var client = new Client()              
    await client.Note.CreateAsync(note);    
  }
  catch (Exception)
  {               
   // ignored
  }
}

当 CreateAsync() 出现异常时,这可以正常工作

当我想丢弃 AddNoteAsync 时,问题就来了,如下所示:

[HttpGet]
[ActionName("testme")]
public bool TestMe()
{
  _ = AddNoteAsync("Test");
  return true;
}

这个最终会回来

“System.AggregateException 通过等待任务或访问其异常属性未观察到任务的异常。因此,未观察到的异常被终结器线程重新抛出。”

即使我在 AddNoteAsync 中等待。

如何修改代码以免出现聚合异常?

4

1 回答 1

1

使用此代码:

[HttpGet]
[ActionName("testme")]
public bool TestMe()
{
  _ = AddNoteAsync("Test");
  return true;
}

您正在调用一个潜在的异步方法。

如果方法没有完成,TestMe将立即返回并且不会捕获异常。

您可以看到以下 2 个版本的区别AddNoteAsync

async Task AddNoteAsync1(string s)
{
    throw new Exception("BOOM!");
}
async Task AddNoteAsync2(string s)
{
    await Task.Delay(10000);
    throw new Exception("BOOM!");
}
``
于 2021-11-25T14:50:54.500 回答