.net core Task.IsFaulted未捕获.Net core中的异常
.net core Task.IsFaulted未捕获.Net core中的异常,.net-core,.net Core,Task.IsFaulted未捕获异常。即使条件为false,它也会发送到else块。你能告诉我哪里做错了吗。我尝试实现尝试。。。捕捉,但仍不工作 public async Task sendmailasync(字符串userid、字符串fullname、字符串注释) { 字符串contentRootPath=\u hostingEnvironment.contentRootPath; 字符串json=System.IO.File.ReadAllText(“appsettings.json”);
Task.IsFaulted
未捕获异常。即使条件为false,它也会发送到else块。你能告诉我哪里做错了吗。我尝试实现尝试。。。捕捉
,但仍不工作
public async Task sendmailasync(字符串userid、字符串fullname、字符串注释)
{
字符串contentRootPath=\u hostingEnvironment.contentRootPath;
字符串json=System.IO.File.ReadAllText(“appsettings.json”);
JObject obj=JObject.Parse(json);
字符串email=(字符串)obj[“sendmailto”];
string subject=“反馈人:“+fullname+”(“+userid+”)”;
//wait\u emailSender.SendEmailAsync(contentRootPath、电子邮件、主题、注释、用户名、全名);
var result=\u emailSender.SendEmailAsync(contentRootPath、电子邮件、主题、注释、用户名、全名);
字符串responseString=“”;
如果(result.IsFaulted)
{
尝试
{
responseString=@“
很抱歉,您的反馈未成功完成
";
}
抓住
{
responseString=@“
反馈已成功提交
";
}
}
返回等待任务。FromResult(responseString);
}
您的sendmailasync()
看起来像一个异步方法,它很可能返回一个任务。如果要检查任务是否成功,则必须等待任务完成
var result = _emailSender.SendEmailAsync(contentRootPath, email, subject, comment, userid, fullname);
result.Wait();
if (result.IsFaulted)
....
或
根据您的sendmailasync()
实现,您可能只需将try/catch
与wait
一起使用即可:
try
{
await _emailSender.SendEmailAsync(contentRootPath, email, subject, comment, userid, fullname);
...
}
catch
{
...
}
您的sendmailasync()
看起来像一个异步方法,它很可能返回一个任务。如果要检查任务是否成功,则必须等待任务完成
var result = _emailSender.SendEmailAsync(contentRootPath, email, subject, comment, userid, fullname);
result.Wait();
if (result.IsFaulted)
....
或
根据您的sendmailasync()
实现,您可能只需将try/catch
与wait
一起使用即可:
try
{
await _emailSender.SendEmailAsync(contentRootPath, email, subject, comment, userid, fullname);
...
}
catch
{
...
}
IsFaulted
不等待任务完成或出现故障,它只检查任务的当前状态。在您的情况下,您正在异步发送电子邮件,而不是等待操作完成,然后测试可能仍在运行的任务
的状态(尚未处于故障状态)
要解决此问题,您可以将等待的呼叫包装在try/catch块中
试试看
{
wait\u emailSender.SendEmailAsync(contentRootPath、电子邮件、主题、注释、用户名、全名);
}
捕获(异常)
{
返回@”
很抱歉,您的反馈未成功完成
";
}
返回@”
反馈已成功提交
";
…或考虑任务
返回方法,在这些方法中,您可以在任务完成后测试成功/失败的结果,例如
public async Task sendmailasync(字符串userid、字符串fullname、字符串注释)
{
字符串contentRootPath=\u hostingEnvironment.contentRootPath;
字符串json=System.IO.File.ReadAllText(“appsettings.json”);
JObject obj=JObject.Parse(json);
字符串email=(字符串)obj[“sendmailto”];
string subject=“反馈人:“+fullname+”(“+userid+”)”;
异步任务SendEmailAsync()
{
尝试
{
wait\u emailSender.SendEmailAsync(contentRootPath、电子邮件、主题、注释、用户名、全名);
}
捕获(异常)
{
//TODO:日志异常等。
返回false;
}
返回true;
}
var succeed=wait sendmailasync();
如果(成功)
{
返回@”
反馈已成功提交
";
}
其他的
{
返回@”
很抱歉,您的反馈未成功完成
";
}
}
IsFaulted
不等待任务完成或出现故障,它只检查任务的当前状态。在您的情况下,您正在异步发送电子邮件,而不是等待操作完成,然后测试可能仍在运行的任务
的状态(尚未处于故障状态)
要解决此问题,您可以将等待的呼叫包装在try/catch块中
试试看
{
wait\u emailSender.SendEmailAsync(contentRootPath、电子邮件、主题、注释、用户名、全名);
}
捕获(异常)
{
返回@”
很抱歉,您的反馈未成功完成
";
}
返回@”
反馈已成功提交
";
…或考虑任务
返回方法,在这些方法中,您可以在任务完成后测试成功/失败的结果,例如
public async Task sendmailasync(字符串userid、字符串fullname、字符串注释)
{
字符串contentRootPath=\u hostingEnvironment.contentRootPath;
字符串json=System.IO.File.ReadAllText(“appsettings.json”);
JObject obj=JObject.Parse(json);
字符串email=(字符串)obj[“sendmailto”];
string subject=“反馈人:“+fullname+”(“+userid+”)”;
异步任务SendEmailAsync()
{
尝试
{
wait\u emailSender.SendEmailAsync(contentRootPath、电子邮件、主题、注释、用户名、全名);
}
捕获(异常)
{
//TODO:日志异常等。
返回false;
}
返回true;
}
var succeed=wait sendmailasync();
如果(成功)
{
返回@”
反馈已成功提交
";
}
其他的
{
返回@”
很抱歉,您的反馈未成功完成
";
}
}
result.Wait()
和Wait result
都将在任务出现故障时抛出,因此在这种情况下,if(result.IsFaulted)
之后的测试将无法访问。result。