gpt4 book ai didi

c# - 使用 BeginExecute 写入 Azure 表存储

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:56 25 4
gpt4 key购买 nike

我尝试使用 BeginExecute 异步写入 Azure 表存储,但得到的结果不一致。当我将 BeginExecute 更改为 Execute 时,所有内容都会正确写入,但我猜我的线程中有问题,它们要么互相取消,要么依赖于某些东西主线程发送消息的速度。这就是我现在正在做的事情:

TableOperation op = TableOperation.Insert(entity);
_table.BeginExecute(op, new AsyncCallback(onTableExecuteComplete), entity);

private void onTableExecuteComplete(IAsyncResult result)
{
TableResult tr = _table.EndExecute(result);
if ((tr.HttpStatusCode < 200) || (tr.HttpStatusCode > 202))
{
Console.WriteLine("Error writing to table.");
}
}

我正在使用一些条目对其进行测试,并且我将在表中获得一两个条目,但不是全部。关于如何捕获错误并确保所有条目都正确写入有什么想法吗?

更新:我发现当我将Thread.Sleep(5000);放在主线程末尾时,所有内容都会完成写入。有没有办法在主线程结束之前暂停它,以确保所有其他线程都已完成,这样它们就不会在完成之前被取消?

最佳答案

可能发生的情况是主线程结束,并销毁所有事件的子线程。当您进行异步编程时,您的主线程要么需要运行足够长的时间才能等待完成(例如服务),要么需要等待异步任务完成:

var result = _table.BeginExecute(op,
new AsyncCallback(onTableExecuteComplete), entity);
result.AsyncWaitHandle.WaitOne();

来源:http://msdn.microsoft.com/en-us/library/system.iasyncresult.aspx

这当然引出了一个问题:如果您在等待“异步”任务完成时不需要执行任何其他操作,那么您不妨同步执行以保持事情更简单。异步模式的目的是为了在等待其他进程完成时不应阻塞线程 - 代价是增加复杂性。

关于c# - 使用 BeginExecute 写入 Azure 表存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15836903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com