C# 等待操作超时:2个项目,相同的数据库,重载

C# 等待操作超时:2个项目,相同的数据库,重载,c#,asp.net-mvc,database,timeout,C#,Asp.net Mvc,Database,Timeout,我们有两个项目使用同一个数据库 由于其中一个项目需要进行大量的数据库操作,另一个项目可能会执行类似以下的小型任务: public async Task<ActionResult> GetManaIconAsync(string _mana) { string mana = _mana.Replace("/", ""); byte[] imageData = await Task.Run<byte[]>(() => mImateManager.Get

我们有两个项目使用同一个数据库

由于其中一个项目需要进行大量的数据库操作,另一个项目可能会执行类似以下的小型任务:

public async Task<ActionResult> GetManaIconAsync(string _mana)
{
    string mana = _mana.Replace("/", "");

    byte[] imageData = await Task.Run<byte[]>(() => mImateManager.GetManaByName(mana));

    return File(imageData, "image/png");
}

public byte[] GetManaByName(string _mana)
{
    using (MyDb db = new MyDb())
    {
        db.Database.Connection.Open();

        IQueryable<ITEM_IMAGES> imageQry = from img in db.ITEM_IMAGES
                       where img.ITEM_IMAGE_TYPE == (int)ImageTypes.Mana
                       select img;

        if (!imageQry.Any())
        {
            return null;
        }

        return imageQry.First(_item => _item.ITEM_NAME == _mana).ITEM_IMAGE;
    }
}
public异步任务GetManaIconAsync(string\u mana)
{
字符串法力=_法力。替换(“/”,“”);
byte[]imageData=wait Task.Run(()=>mImateManager.GetManaByName(mana));
返回文件(imageData,“image/png”);
}
公共字节[]GetManaByName(字符串_mana)
{
使用(MyDb=new MyDb())
{
db.Database.Connection.Open();
IQueryable imageQry=来自db.ITEM\u图像中的img
其中img.ITEM_IMAGE_TYPE==(int)ImageTypes.Mana
选择img;
如果(!imageQry.Any())
{
返回null;
}
返回imageQry.First(\u item=>\u item.item\u NAME==\u mana);
}
}
如果(!imageQry.AnY())提示等待操作超时,则project2将崩溃,这是正常的,因为project1当前正在执行繁重的工作


现在我的问题是我如何解决这个问题?有哪些选项可供选择,以便两者都可以在不影响(太多)另一方的情况下完成各自的工作?

SQL service broker可能是您的一个选项。请回顾:并告诉我这是否适用于您的场景。

我不确定是否正确理解了什么是服务代理。如果我错了,请纠正我的错误:它将接受我发送给它的任何查询/任务,然后在恢复主程序的同时异步执行这些任务,这样项目A可能会执行其繁重的负载,而项目B将能够进行查询调用,并且所有内容都将被单独处理?这是正确的。您可以将大量请求异步发送到ServiceBroker,然后与应用程序B连接到数据库。请看:有关可伸缩性的更多详细信息,或者您可能希望搜索特定于限制服务代理的文章,请确保在响应有助于解决问题时将其标记为已回答。快乐编码!我将对此进行探索,你知道我可以从哪些方面获得这方面的教程/示例吗?