none
有关理解Task的疑问? RRS feed

  • 问题

  •         static public IRandomAccessStream GetIStreamFormBuf(byte[] buf)
            {
                IRandomAccessStream stream = null;
                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;
            }


    await Task.Factory.StartNew(async () =>
    {
        // Code to process share data goes in here.
    });

    都有Task这个类

    Question1:Task类一般什么时候使用?他的用法是什么?哪里有具体的文档介绍呢?

    还有曾经看到过这个疑问

    async public Task<bool> CreateFolrderAsync(string florderName)
            {
                //return Task.Run(async () =>
                //    {
                        try
                        {
                            StorageFolder folder = await storageFolder.CreateFolderAsync(florderName, CreationCollisionOption.OpenIfExists);
                        }
                        catch (Exception ex)
                        {
                            System.Diagnostics.Debug.WriteLine(ex.Message);
                            throw ex;
                        }
                        return true;
                    //});
            }
    
    注释掉的部分,注释和不注释都可以正常运行,那么用Task.run()和不用有什么不同的地方?用哪种好?

    然后有人回答:调用Task.Run,里面的操作是另起了一个线程。如何选择,根据你具体的操作。如果是比较耗时的操作,另起线程而不占用UI线程,如果非常快速的操作,可以不需要。

    Question2:那这个和使用ThreadPool有什么区别呢?

    Question3: Task.Factory.StartNew与Task.Run这些用法有什么区别呢?

    Question4:现在一般的异步编程都是用async与await关键字,返回值为void ,那是什么时候需要用到调用Task里的方法,并且返回值类似Task<bool>呢?


    2012年10月24日 2:18

答案

全部回复