首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步访问与异步SQL

异步访问与异步SQL
EN

Stack Overflow用户
提问于 2017-07-24 13:40:41
回答 1查看 268关注 0票数 0

有人能向我解释一下为什么这在SQL中是异步的,而在OleDb中却不是异步的吗?

也许是怎么修的。

SQL

代码语言:javascript
复制
static void Main(string[] args)
{
    var task = Run();
    while(!task.IsCompleted)
        Console.WriteLine("Hmm");
    task.Wait();
}

private static async Task Run()
{
    string conString = @" ... ";
    var con = new SqlConnection(conString);
    con.Open();
    using(var command = new SqlCommand("SELECT * FROM Products2;", con))
    {
        command.Parameters.Add(new SqlParameter("p", 337));
        using(var reader = await command.ExecuteReaderAsync())
            while(await reader.ReadAsync())
                Console.WriteLine(reader.GetString(2));
    }
}

访问

代码语言:javascript
复制
    static void Main(string[] args)
    {
        var task = Run();
        while(!task.IsCompleted)
            Console.WriteLine("Hmm");
        task.Wait();
    }

    private static async Task Run()
    {
        string conString = @" ... ";
        var con = new OleDbConnection(conString);
        con.Open();
        using(var command = new OleDbCommand("SELECT * FROM Products2;", con))
        {
            command.Parameters.Add(new OleDbParameter("p", 337));
            using(var reader = await command.ExecuteReaderAsync())
                while(await reader.ReadAsync()) //Note - Calling Async
                    Console.WriteLine(reader.GetString(2));
        }
    }

这样您就不必自己复制它了,在执行SQL时,它将同时打印结果和"Hmm"。在OleDb中只是打印结果。

我可以通过包装await Task.Run(() => Console.WriteLine(reader.GetString(2)));来修复它,但这只会产生其他错误。

来自SQL的结果

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-24 14:02:17

有人能向我解释一下为什么这在SQL中是异步的,而在OleDb中却不是异步的吗?

是否实现异步方法取决于ADO.NET提供程序。如果提供程序不支持异步,则异步方法只是同步运行。

也许是怎么修的。

如果您的实际应用程序在ASP.NET上,只需继续异步调用它们;它们将同步运行,但您无法对其做任何事情,如果将来升级以支持异步,您的代码将自动使用这种新功能。

如果您真正的应用程序是UI应用程序,那么您需要将数据库代码封装在后台线程(例如Task.Run)中。在这种情况下,这取决于您是使用异步API还是同步API;不管怎样,我肯定会留下一条注释,解释ADO.NET提供程序是同步执行的,这就是为什么它处于后台线程中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45282217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档