HtmlDocumentProcessorDelegate hPT = new HtmlDocumentProcessorDelegate(HtmlDocumentProcessor.Process);
            IAsyncResult ia = hPT.BeginInvoke(step, propertyBag, null, null);
            hPT.EndInvoke(ia);
后来想到            Task.Factory有这个执行一个异步操作的方法,就改成这样;俄
      HtmlDocumentProcessorDelegate hPT = new HtmlDocumentProcessorDelegate(HtmlDocumentProcessor.Process);
            IAsyncResult ia = hPT.BeginInvoke(step, propertyBag, null, null);  
            Task.Factory.FromAsync(ia, hPT.EndInvoke);
第一种直接用异步 propertyBag这个对象的值在委托指向的函数里被修改了还能反应出来,
用后面一种方式就没结果了。但是我的Process函数是void类型的,本来用
public Task<TResult> FromAsync<TResult>(
IAsyncResult asyncResult,
Func<IAsyncResult, TResult> endMethod
)
带有返回值的 异步任务就可以了,但是我不想修改Process函数的返回类型

解决方案 »

  1.   

    大概问题就是实现异步任务,。我没等待任务结束,所以取得不到结果,如果我加一句 a.wait();等待这个异步任务结束的话,是可以看到结果的。我想异步任务如果要等待结果的话,就没必要搞异步了,是不是?那有什么办法取得异步的结果呢?如果我不等待的话 Task a = Task.Factory.FromAsync(ia, hPT.EndInvoke, TaskCreationOptions.AttachedToParent);
      a.Wait();
      

  2.   

    异步的话一般是调用一个委托,一般来说结果是只能在委托里面取。
    如果你一定要结果返回主界面(可以用SendMessage(发消息给窗体),或者用触发事件(把结果放在参数传递,在事件函数Show结果)