c# - 多个线程同时更新 AZURE 表中同一行的不同列
问题描述
我有一个要求,我必须更新 azure 表中同一行的不同列,该表由多个线程同时访问(所有查询同一行),而不会覆盖其他线程将更新的内容。 示例代码:
public void doSomething(){
List<string> records= new List<string>();
for (var j = 0; j < 12; j++)
{
InsertRecords(j);//Inserts data to the table and Creates a variable Ids=PartitionKey+rowkey
records.Add(Ids);//It has all 12 partitionKeys and RowKeys combinations
}
for (var i = 0; i < 12;i+=4)
{
List<Task> tasks = new List<Task>();
tasks.Add(Task.Run(() => {
UpdateTable("COl1",records[i]); }));//should update col1 to complete
tasks.Add(Task.Run(() => {
UpdateTable("Col2",records[i]); }));
tasks.Add(Task.Run(() => {
UpdateTable("Col3",records[i]); }));
tasks.Add(Task.Run(() => {
UpdateTable("Col4",records[i]); }));
Task.WaitAll(tasks.ToArray());
}
}
public void UpdateTable(String message){
ITableEntity entity = myRepo.retrieveEntity(myPartitionKey, myRowKey);
If (message=="COL1"){
//Update Col1 to Complete
(myClass)entity).Col= "Complete";
}
If (message=="COL2"){
//Update Col2 to Complete
(myClass)entity).Col2= "Complete";
}
If (message=="COL3"){
//Update Col3 to Complete
(myClass)entity).Col3= "Complete";
}
TableOperation tableOp=TableOperation.InsertOrReplace(entity);
//var mergeOperation = TableOperation.Merge(entity); tried this also but didnt work
// myTable.Execute(mergeOperation);
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("ConnString");
CloudTableClient tableClient=storageAccount.CreateCloudTableClient();
myTable = tableClient.GetTableReference("MyTable");
myTable.CreateIfNotExists();
myTable.Execute(tableOp);//doesn't seem to work[overwrites]
}
预期输出:COl1、Col2、Col3 的状态应为“完成”。如何做到这一点?
解决方案
推荐阅读
- ruby-on-rails - Travis 配置条件环境变量
- css - 这是正确的 bem 命名吗?
- python - 使用 Python 提取 xml 数据
- javascript - Google Recaptcha v3 错误:“超时或重复”
- r - 加载数据时的进度条
- openstreetmap - 如何设置两国之间的路由?加载两个“*-gh”文件夹
- ruby-on-rails - 当其他属性发生变化时如何更新一个属性
- regex - Detect a specific pattern inside a url /us-en/ to something else
- delphi - Delphi 文档在 abort 和 Abort 之间有所不同 - 它是 doc 中的错误还是 Delphi 区分大小写?
- python - String contains between two df in python