将同步方法包装成可以“等待”的异步方法

时间:2013-08-02 18:01:57

标签: c# asynchronous windows-phone-8

我有一个同步通话:

_context.User.Where((u) => (u.UserID == twitterId && u.Type == UserType.Show)).SingleOrDefault();

我需要将其包含在异步中,我可以等待使用await关键字。

我怎样才能做到这一点?

感谢。

2 个答案:

答案 0 :(得分:12)

您需要使用Task.Run方法打包同步来电。

var user = await Task.Run(() => 
   _context.User
           .Where(u => u.UserID == twitterId && u.Type == UserType.Show)
           .SingleOrDefault());

请记住,6.0版中的EntityFramework将具有异步接口,因此您不再需要使用此代码。

答案 1 :(得分:3)

在EF6中添加的QueryableExtensions使这变得轻而易举:

await _context.User.SingleOrDefaultAsync(u => 
    u.UserID == twitterId 
    && u.Type == UserType.Show);

不要忘记在EntityFramework.dll中引用System.Data.Entity