在ashx中的一个方法
public string sendMsg(string msg) { //创建消息 PushMessageUitl.PushMessageAsy(msg); //返回消息id return "123"; } public class PushMessageUitl { public static void PushMessageAsy(string msg) { var task = Task.Factory.StartNew(() => PushMessage(msg)); } public static void PushMessage(string msg) { //推送消息 } }
这种方式,PushMessageAsy没有异步执行,执行完了PushMessageAsy,sendMsg方法才返回。
public string sendMsg1(string msg) { //创建消息 var task = Task.Factory.StartNew(() => PushMessageUitl.PushMessage(msg)); //返回消息id return "123"; }
这样调用的话就能异步执行,不知道为什么会这样,希望得到大神指导!
另外一个问题异步方法中HttpContext.Current.Cache获取不到,即使我将HttpContext最为异步调用方法的参数传入也获取不到,新线程不能访问HttpContext数据?
建议使用async/await
那两种调用方式为什么有那个区别,第一种虽然是另一个线程执行,但不是异步,什么原因造成的呢?
@摆脱菜鸟: Task.Factory.StartNew() 只是在一个新的线程中执行,并不是异步
@摆脱菜鸟: 推荐园子里的一篇博文:看stackoverflow大牛如何回答何时在ASP.NET中使用异步控制器?
@dudu: 感谢!
你这个不是异步,是新其了线程。
新建个委托并把httpcontext传入,利用委托的异步来做