2 .net c# asynchronous entity-framework async-await
我一直想弄明白ExecuteSqlCommandAsync,我一直无法找到任何好的文档.
if (OldMarketRightsIDs.Count > 0)
{
//This is where I want to have the task Begin
TaskReturn = Data.MK3Model.Database.ExecuteSqlCommandAsync("DELETE FROM TitleMarketRights WHERE ID in (" + string.Join(", ", OldMarketRightsIDs) + ")");
}
//This is the Code I want To execute in between
var NewMarketRights = MarketRights.Select(m => new
{
Key = m.Key,
Value = m.Value.Except(CurrentMarketRights[m.Key].Select(c => c.FK_ProductRight).ToList())
}).ToList();
foreach (var mr in NewMarketRights)
{
foreach (var ProdID in mr.Value)
{
Data.MK3Model.TitleMarketRights.Add(new TitleMarketRight { FK_MarketID = (mr.Key == 0) ? null : (int?)mr.Key, FK_TitleID = ID, FK_ProductRight = ProdID });
}
}
//This is where I want to wait until the task is complete before continuing
var i = await TaskReturn;
Run Code Online (Sandbox Code Playgroud)
这个例子没有编译,它得到一个错误await运算符只能与async方法一起使用.关于如何使这个工作的任何想法
你的代码很好.它只需要在一个async方法内:
public async Task FooAsync()
{
if (OldMarketRightsIDs.Count > 0)
{
TaskReturn = Data.MK3Model.Database.ExecuteSqlCommandAsync("DELETE FROM TitleMarketRights WHERE ID in (" + string.Join(", ", OldMarketRightsIDs) + ")");
}
var NewMarketRights = MarketRights.Select(m => new
{
Key = m.Key,
Value = m.Value.Except(CurrentMarketRights[m.Key].Select(c => c.FK_ProductRight).ToList())
}).ToList();
foreach (var mr in NewMarketRights)
{
foreach (var ProdID in mr.Value)
{
Data.MK3Model.TitleMarketRights.Add(new TitleMarketRight { FK_MarketID = (mr.Key == 0) ? null : (int?)mr.Key, FK_TitleID = ID, FK_ProductRight = ProdID });
}
}
var i = await TaskReturn;
}
Run Code Online (Sandbox Code Playgroud)
这就是允许你使用的东西await.在幕后,构建了一个状态机,用于处理方法的异步特性.该方法需要具有async关键字并返回a Task或者Task<T>如果您有返回值.
如果你想将它作为lambda表达式,那么:
Func<Task> fooAsync = async () =>
{
if (OldMarketRightsIDs.Count > 0)
{
TaskReturn = Data.MK3Model.Database.ExecuteSqlCommandAsync("DELETE FROM TitleMarketRights WHERE ID in (" + string.Join(", ", OldMarketRightsIDs) + ")");
}
var NewMarketRights = MarketRights.Select(m => new
{
Key = m.Key,
Value = m.Value.Except(CurrentMarketRights[m.Key].Select(c => c.FK_ProductRight).ToList())
}).ToList();
foreach (var mr in NewMarketRights)
{
foreach (var ProdID in mr.Value)
{
Data.MK3Model.TitleMarketRights.Add(new TitleMarketRight { FK_MarketID = (mr.Key == 0) ? null : (int?)mr.Key, FK_TitleID = ID, FK_ProductRight = ProdID });
}
}
var i = await TaskReturn;
};
var task = fooAsync();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9710 次 |
| 最近记录: |