首页 新闻 搜索 专区 学院

.NET Task异步的问题

0
悬赏园豆:30 [已解决问题] 解决于 2015-12-25 10:43

在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数据?

摆脱菜鸟的主页 摆脱菜鸟 | 初学一级 | 园豆:16
提问于:2015-11-25 11:26
< >
分享
最佳答案
0

建议使用async/await

收获园豆:20
dudu | 高人七级 |园豆:37751 | 2015-11-25 12:14

那两种调用方式为什么有那个区别,第一种虽然是另一个线程执行,但不是异步,什么原因造成的呢?

摆脱菜鸟 | 园豆:16 (初学一级) | 2015-11-25 12:47

@摆脱菜鸟:  Task.Factory.StartNew() 只是在一个新的线程中执行,并不是异步

dudu | 园豆:37751 (高人七级) | 2015-11-25 13:44
dudu | 园豆:37751 (高人七级) | 2015-12-03 07:43

@dudu: 感谢!

摆脱菜鸟 | 园豆:16 (初学一级) | 2015-12-16 10:41
其他回答(1)
0

你这个不是异步,是新其了线程。

新建个委托并把httpcontext传入,利用委托的异步来做

收获园豆:10
古月三石 | 园豆:259 (菜鸟二级) | 2015-11-26 14:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册