控制台程序中使用sentry发现异常报告不及时,如下:
private static void Main(string[] args)
{
using (SentrySdk.Init(sentryDSN))
{
Test();
}
Console.WriteLine("开始发送异常");
}
private static void Test()
{
try
{
var a = 0;
Console.WriteLine(1/a);
}
catch (Exception e)
{
SentrySdk.CaptureException(e);
//主动发送的异常也被缓存,等待sentry.disposed()发送
throw;
}
}
在sentry作用域结束前,异常不会发送到dsn,上面的控制台程序每次都等到Console.WriteLine("开始发送异常");才开始发送异常;
解决方案:
private async Task Test()
{
try
{
var a = 0;
Console.WriteLine(1/a);
}
catch (Exception e)
{
SentrySdk.CaptureException(e);
await SentrySdk.FlushAsync(TimeSpan.FromSeconds(10));
//强制刷新,这一句执行完毕异常就会发送
throw;
}
}
在web程序中未遇到这样的问题,推测把sentry注册为单例也会遇到;