如何建立任务工厂?

时间:2017-01-23 20:41:08

标签: c# asynchronous async-await task

首先,对不起我的英语。其次,我寻找其他解决方案(甚至是“SemaphoreSlim”,但是当我使用它时,所有任务都被抛出“任务被取消”异常)

我正在使用MS SQL,public static SqlConnection Connection

在此Connection我想执行所有Sql任务,但这些任务可以在同一时间多次启动,

我们有一个功能:

    private async object GetSomething()
    {
        try
        {
            using (var cmd = new SqlCommand("SELECT * FROM USERS WHERE id = 1;", Connection))
            {
                await Connection.OpenAsync();

                var result = await cmd.ExecuteScalarAsync();

                Connection.Close();

                return result;
            }
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message);
            Connection.Close();
            return null;
        }
    }

例如:在同一时间,我想要执行此功能两次

当第一次使用await Connection.OpenAsync();时,没有问题,但是当此功能尚未完成时,

await Connection.OpenAsync();将再次执行,它将抛出错误“Connection is not closed”;

这是因为Connection.Close()未执行,因为程序正在等待来自var result = await cmd.ExecuteScalarAsync();的第一个对象

所以我想避免这个问题,通过创建TasksManager,它将所有任务作为队列运行,并将正确的结果返回到等待函数的程序的一部分。有可能吗?

我希望你明白我想做什么。

//我做错了什么,你没有投票吗?

0 个答案:

没有答案