问题描述
我有一个带有调用外部依赖项的异步方法的服务(这里有一个虚假的实现,仅用于演示目的):
public class RandomNumberService : IRandomNumberService
{
private readonly IHttpClientFactory _httpClientFactory;
public RandomNumberService(IHttpClientFactory httpClientFactory) => _httpClientFactory = httpClientFactory;
public async Task<int> GetRandomNumber()
{
HttpClient client = _httpClientFactory.CreateClient();
HttpResponseMessage response = await client.GetAsync(@"http://www.randomnumberapi.com/api/v1.0/random?min=1&max=10&count=1");
int[]? result = await response.Content.ReadFromJsonAsync<int[]>();
if (!response.IsSuccessstatusCode || result == null || !result.Any())
{
var stackTrace = new StackTrace().ToString();
// log error with the stack trace
return 42;
}
int number = result.First();
return number;
}
}
可以从多个地方调用此服务,因此当发生错误时,我想用有用的堆栈跟踪记录它,但在我的 stackTrace
变量中,我得到以下恐怖:
at AsyncStackTraces.Services.RandomNumberService.GetRandomNumber()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.ExecutionContextCallback(Object s)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback callback,Object state)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext(Thread threadPoolThread)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext()
... and 125 more lines of System stuff
问题是在堆栈跟踪中没有任何地方看到我的服务的调用者,这对调试错误很有用。
编辑:
我见过这个 similar question 但 Ben.Demystifier 不满足我的需要,因为我没有处理异常,而且 EnhancedStackTrace.Current()
不提供完整的堆栈跟踪(它不'不包含服务的名称或其调用者):
有没有办法让完整(和干净的)堆栈跟踪记录下来?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)