gpt4 book ai didi

C# await and sync——我是不是误会了什么?

转载 作者:行者123 更新时间:2023-12-02 05:23:25 25 4
gpt4 key购买 nike

我已经将一个应用程序从 Android 移植到 Windows Phone 7,并且能够使用对文件 io 等的同步调用而没有很多问题(我使用线程,所以这简化了事情)。

但是,现在我正在移植到 Windows 8 商店应用程序,并且 XxxAsync() 方法在 api 中很猖獗。

我是否应该盲目地使用异步 api 并希望得到最好的结果?

我有各种疑惑……例如:

假设用户点击“保存”按钮来保存数据模型。所有的保存都是异步完成的。这意味着用户可以在保存数据模型时更改数据模型。如果中途修改文件,这不会弄乱数据并损坏他的文件吗?

这如何让开发人员更轻松?

我读过各种异步文章(例如 this ),但我觉得好像我可能遗漏了什么......

感谢您的见解。

最佳答案

在 UI 中使用异步的想法是所有您的代码都在一个线程(UI 线程)上运行。当用户单击“保存”按钮时,您的处理程序就会运行。此时,UI 正忙于运行您的代码,因此 UI 不是交互式的。当您准备好要发送到服务器的数据的快照时,您将启动异步保存并且(从技术上讲)您的处理程序已完成。控制传递回 UI,它再次响应。

此时,用户可以更新数据模型,但操作系统不查看数据模型。它只是确保将单独的数据缓冲区(您在“保存”按钮处理程序中创建的快照)发送到服务器。当发生这种情况时,您的异步回调将再次在 UI 线程上执行。根据您使用的版本,您可能需要手动将该调用转移到 UI 线程,使用 BeginInvoke .

这与浏览器中 JavaScript 中使用的模型完全相同。

它并没有完全解决所有的同步问题。例如,除非您在上传期间禁用“保存”按钮,否则用户可以在服务器已经接收到第一次保存时再次单击“保存”。但这只是服务器需要担心的问题,它最好能够应对两个同时尝试的保存。

您可能遇到的一个问题是您以前的应用程序版本。如果你到处都在使用线程,你是否适本地使用了锁或线程安全的数据结构?您描述的问题肯定存在于自由线程应用程序中!

关于C# await and sync——我是不是误会了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13489810/

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