将同步方法包装成异步方法,异步方法可以是';等待';在上面

本文关键字:异步方法 在上面 等待 包装 同步方法 | 更新日期: 2023-09-27 18:25:55

我有一个同步调用:

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

我需要包装成一个异步的,我可以使用await关键字等待它。

我怎样才能做到这一点?

谢谢。

将同步方法包装成异步方法,异步方法可以是';等待';在上面

您需要使用Task.Run方法包装同步调用。

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

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

QueryableExtensions,添加到EF6中,让这一切变得轻而易举:

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

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