将同步方法包装成异步方法,可以使用“等待”来等待。

8

我有一个同步调用:

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

我需要将它包装成一个异步方法,以便我可以使用await关键字进行等待。如何实现呢?谢谢。

2
相关博客文章 - Stephen Cleary
2个回答

11

你需要使用Task.Run方法来封装同步调用。

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

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


3

QueryableExtensions,是EF6新增的功能,使得这个过程变得轻而易举:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接