zoukankan      html  css  js  c++  java
  • Async,await在Silverlight中的应用

    silverlight 可以使用AsyncCTP了。这样可以使得代码更简单。于一个简单的调用RIA Service为例。

    RIA 代码

     [EnableClientAccess()]
        public class AsyncDomainService : DomainService
        {
            public IQueryable<Data> GetDatas()
            {
                List<Data> dats = new List<Data>
                {
                    new Data {Name ="Dat 1"},
                    new Data {Name ="Dat 2"},
                    new Data {Name ="Dat 3"},
                    new Data {Name ="Dat 4"},
                };
                Thread.Sleep(1000 * 7);
                return dats.AsQueryable();
            }

            [Invoke]
            public int GetInt()
            {
                return 1;
            }
        }

        public class Data
        {
            [Key]
            public string Name { get; set; }
        }

    SL 代码:

    首先添加一个扩展方法(微软  Kyle McClellan)

        public static class OperationExtensions
        {
            public static  Task<T> AsTask<T>(this T operation)
              where T : OperationBase
            {
                TaskCompletionSource<T> tcs =
                  new TaskCompletionSource<T>(operation.UserState);

                operation.Completed += (sender, e) =>
                {
                    if (operation.HasError && !operation.IsErrorHandled)
                    {
                        tcs.TrySetException(operation.Error);
                        operation.MarkErrorAsHandled();
                    }
                    else if (operation.IsCanceled)
                    {
                        tcs.TrySetCanceled();
                    }
                    else
                    {
                        tcs.TrySetResult(operation);
                    }
                };

                return tcs.Task;
            }
        }

    在要显示结果的页面的.cs文件里面添加测试

     public async void  test()
            {           
                AsyncDomainContext context = new AsyncDomainContext();
                LoadOperation<Data> loadOperation = await context.Load<Data>(context.GetDatasQuery()).AsTask();
                List<Data> dats = new List<Data>(loadOperation.Entities);
                textBlock1.Text = "Get "+dats.Count.ToString()+" Data.";
                dataGrid1.ItemsSource = dats ;
                dataGrid1.AutoGenerateColumns = true;
                InvokeOperation<int> invokeOperation = await context.GetInt().AsTask();
                textBlock1.Text += " And Get Int=" + invokeOperation.Value;
            }

    Ok !

  • 相关阅读:
    理解 CSS3中 object-fit
    CSS布局总结(一)
    Webpack 学习记录之概念
    python中深浅拷贝
    Vue中的动画封装
    Vue中的列表过渡
    Vue中多个元素或组件的过渡
    Vue中的Js动画与Velocity.js 的结合
    在Vue中同时使用过渡和动画
    在Vue中使用 animate.css 库
  • 原文地址:https://www.cnblogs.com/mjgb/p/1956166.html
Copyright © 2011-2022 走看看