none
在Task.Run去给外部的对象赋值,出去之后内容离奇没有了 RRS feed

  • 问题

  • 如下代码
            static public IRandomAccessStream GetIStreamFormBuf(byte[] buf)
            {
                IRandomAccessStream stream = null;
                //todo 目前这个接口在主线程调用会卡死
                Task.Run(() =>
                {
                    var t = GetIStreamFormBufAsync(buf);
                    t.Wait();
                    stream = t.Result;
                }).Wait();
                return stream;
            }
    
            static public async Task<IRandomAccessStream> GetIStreamFormBufAsync(byte[] buf)
            {
                if (buf != null)
                {
                    InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream();
                    using (DataWriter dataWriter = new DataWriter(ras.GetOutputStreamAt(0)))
                    {
                        dataWriter.WriteBytes(buf);
                        await dataWriter.StoreAsync().AsTask().ConfigureAwait(false);
                        await dataWriter.FlushAsync().AsTask().ConfigureAwait(false);
                        return ras;
                    }
                }
                return null;
            }
    在第一个函数黎孟德t.Result的数据是有的,但是出去Task线程后,stream就Size变成了0,这是为什么呢?
    2012年5月22日 9:19

全部回复

  • 不要使用Task.Run 直接调用 Var value=GetIStreamFormBufAsync().ConfigureAwait(false) 

    2012年5月23日 10:01
  • 你试试就知道了,在主线程调用,直接卡死
    2012年5月24日 2:03
  • 其实我是不想继续往外面的接口写async,所以想用wait同步
    2012年5月24日 2:05
  • 我这里测试了你的代码,在一个MainPage的 OnNavigatedTo 方法里面,应该是主线程哦。 可以拿到IRandomAccessStream,虽然VS Debugger无法显示Size(跨线程这里Watcher还是无法抓到size),但是还是可以Read出数据的,没有问题,int b = s.AsStreamForRead().ReadByte();


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年5月24日 9:07
    版主