摘要: 对于异步方法调用“GetAwaiter()”或者“Wait()”方法都将导致“等待调用方完成执行”;异步方法中使用await关键字会导致await关键字之后代码都进行默认的线程封送,这种封送是默认封送。在metro应用中,默认封送的目标对象是UI线程。所以,等你在UI线程上调用Wait()或者GetAwaiter()其结果就是“等待UI线程执行完成”。在线程中等待自身结束,这个结果不用说就是死锁。如果想要在UI线程上等待异步方法的完成,那么必须保证异步方法的await封送不会封送到默认的UI线程上,Task<TResult>对象有一个ConfigureAwait方法,参数是一个bo 阅读全文
posted @ 2012-07-04 10:53 think_do 阅读(575) 评论(0) 推荐(0) 编辑
摘要: public class Class1 { List<string> data = new List<string>(); async public Task<List<string>> getlist() { return await Task.Run(() => { get(); List<string> l = new List<string>(); l.AddRange(data); return l; }); } async public void get() { await Task.Run(() =&g 阅读全文
posted @ 2012-07-04 10:50 think_do 阅读(410) 评论(0) 推荐(1) 编辑