目前的问题,用户等待太久;使用了task新建线程来执行期望有所改善,因为这个方法不影响后面的返回结果,看起来也没效果。
public ActionResult AddSome(tInput model)
{
......
Task.Run( () => longTime( model));
return Json(new ResultEntity() { result = true });
}
是否思路有问题? 改为异步 ?麻烦写个简单的demo
存在一个问题,longTime()方法如果抛出异常,程序应该捕捉不到吧
你给出的代码就是异步在执行longTime 这个method了. 如果没效果就检查 "......" 的代码
耗时要分析代码,看看是哪里耗时?
如果是数据库查询耗时,就优化慢sql。
慢分多种情况:
1、C#逻辑复杂导致慢
2、执行SQL慢
3、网络有延时慢
可以通过打日志,看慢在哪一步。一般是第二个,如果是数据库慢,通过SQL Server Profiler监听一下慢SQL,再对症下药做优化。
在处理比较耗时的方法时,使用异步操作是一个常见的优化方法,它可以提高系统的响应性能。
在ASP.NET MVC中,你可以将这个耗时的方法改造为异步方法,并使用async
和await
关键字来处理。这样可以将长时间运行的代码在后台线程上执行,并允许主线程继续执行其他操作,从而确保用户在等待期间不会被阻塞。
下面是一个简单的示例代码:
csharp
public async Task<ActionResult> AddSome(tInput model)
{
// 其他代码...
await Task.Run(() => longTime(model)); // 异步执行耗时方法
return Json(new ResultEntity() { result = true });
}
// 耗时的方法
private void longTime(tInput model)
{
// 长时间运行的代码
// 可以在这里执行一些耗时的操作,如IO操作、计算等
}
在上面的示例代码中,通过将AddSome
方法标记为异步方法,并在调用耗时方法时使用await Task.Run(...)
来实现异步执行。
值得注意的是,这种异步方式并不一定能解决所有性能问题,具体的性能优化还需要根据实际情况和业务需求进行分析和调整。例如,可以考虑使用缓存、异步IO、并行处理等技术来进一步优化。
希望这个简单的示例对你有帮助!如果有需要进一步的解释或其他问题,请随时提问。
参见上述内容,存在不影响返回的Action,可以将任务放入到后台任务中处理。
试试这样写 Task.Run( async () => await longTime(model));