请问有大神吗,C#异步调用的问题,读取不到,同步可以

无极限冰红茶 2017-05-18 11:43:53
首先说下,上次一个大神说我分数没给好。很抱歉@wang_peng_yl
因为也是初学。所以理解的不是很清楚

能帮我看看吗,网上很多教程我都看了,没得到我想要的。
...全文
249 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
无极限冰红茶 2017-05-21
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
你这种代码一看就是 #4 楼所说的“明明是想异步的,又用同步返回代码”的写法。 异步就要在回调中返回 ds。也就是说所谓的 GetQD..... 方法的返回类型为 void,它一运行就完成了,然后过一段时间在委托回调中返回值。它怎么可能有一个 DataSet 类型返回? 你这个方法不过就是完完全全照抄人家自动给产生的异步调用远程服务的方法,如果你真想异步,那么你其实根本没有必要额外多封装一层,就是直接用人家的那个 xxxxCompleted 事件回调现成方式就好,自己完全不需要再写这样一个方法。你异步调用人家,然后自己写的这个方法的又想同步返回 ds 结果,然后你又在 #5 楼说什么“我只想异步”,何必如此崩溃呢?你什么都不用写,自己写了代码反而多余了。
恩恩,我好好看下,因为是初学者不是很清楚这些。谢谢
  • 打赏
  • 举报
回复
你这种代码一看就是 #4 楼所说的“明明是想异步的,又用同步返回代码”的写法。 异步就要在回调中返回 ds。也就是说所谓的 GetQD..... 方法的返回类型为 void,它一运行就完成了,然后过一段时间在委托回调中返回值。它怎么可能有一个 DataSet 类型返回? 你这个方法不过就是完完全全照抄人家自动给产生的异步调用远程服务的方法,如果你真想异步,那么你其实根本没有必要额外多封装一层,就是直接用人家的那个 xxxxCompleted 事件回调现成方式就好,自己完全不需要再写这样一个方法。你异步调用人家,然后自己写的这个方法的又想同步返回 ds 结果,然后你又在 #5 楼说什么“我只想异步”,何必如此崩溃呢?你什么都不用写,自己写了代码反而多余了。
wang_peng_yl 2017-05-19
  • 打赏
  • 举报
回复
具体什么错误,从你代码上看,没什么问题
无极限冰红茶 2017-05-18
  • 打赏
  • 举报
回复
我觉得应该是我代码写错了。但是因为都没找到啥资料。按照自己理解的,能指点下吗
无极限冰红茶 2017-05-18
  • 打赏
  • 举报
回复
引用 1 楼 diaodiaop 的回复:
一个http 你是同步 还是异步 我觉得没什么区别. 反正就是一次请求 一次应答而已啊.. 至于所谓的异步 只是在你的iwnform中体现而已..没有必要吧
我知道没啥必要,但是领导要求的,没办法
by_封爱 版主 2017-05-18
  • 打赏
  • 举报
回复
一个http 你是同步 还是异步 我觉得没什么区别. 反正就是一次请求 一次应答而已啊.. 至于所谓的异步 只是在你的iwnform中体现而已..没有必要吧
无极限冰红茶 2017-05-18
  • 打赏
  • 举报
回复
引用 4 楼 bloodish 的回复:
明明是异步的,又想同步返回结果。。。 做是可以做到的,加个Event来等待complete完成

 AutoResetEvent evt = null;
        DataSet ds = null;
        public DataSet GetQDZYLB()
        {
            //your codes

            if (evt == null) evt = new AutoResetEvent(false);
            else evt.Reset();            

            //wait until get operation completed
            if(evt.WaitOne(-1)) return ds;
            else return null;           
        }

        private void XXCompleted()
        {
            //ds = ...

            //Signal the event
            evt?.Set();
        }
我只想异步,请问怎么实现大神
bloodish 2017-05-18
  • 打赏
  • 举报
回复
明明是异步的,又想同步返回结果。。。 做是可以做到的,加个Event来等待complete完成

 AutoResetEvent evt = null;
        DataSet ds = null;
        public DataSet GetQDZYLB()
        {
            //your codes

            if (evt == null) evt = new AutoResetEvent(false);
            else evt.Reset();            

            //wait until get operation completed
            if(evt.WaitOne(-1)) return ds;
            else return null;           
        }

        private void XXCompleted()
        {
            //ds = ...

            //Signal the event
            evt?.Set();
        }

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧