【发布时间】:2009-11-02 21:34:57
【问题描述】:
我将创建一个 DLL 库,允许开发人员搜索和访问 IMDB 电影页面。
我应该如何处理 GUI 中的冻结,我应该使用异步方法,还是应该允许开发人员手动创建线程以使用我们的 DLL?
【问题讨论】:
标签: c# .net webclient asynchronous
我将创建一个 DLL 库,允许开发人员搜索和访问 IMDB 电影页面。
我应该如何处理 GUI 中的冻结,我应该使用异步方法,还是应该允许开发人员手动创建线程以使用我们的 DLL?
【问题讨论】:
标签: c# .net webclient asynchronous
这完全取决于您。
话虽如此,我认为提供异步和同步 API 将使您的库更像框架库,这将为您的用户提供正确使用它的最佳机会。
例如,WebClient 提供DownloadFile 和DownloadFileAsync。我个人会在我的 API 中模仿这种行为。如果您以异步方式实现库,则很容易将其包装在同步 API 中。
【讨论】:
这是对您的判断。但是考虑一下:
如果您只以同步方式公开,用户始终可以使用BackgroundWorker 来避免阻塞。
如果您觉得可以在操作期间提供一些中间数据(例如进度百分比),那么异步版本可能会很有用。
【讨论】:
我会避免在这样的库中进行异步调用。
如果图书馆的用户不关心阻塞怎么办?如果它是一个应该阻塞的命令行脚本呢?
应用程序的线程化是一项重大的设计决策,请避免为它们做出决定。
我将首先实现阻塞、同步调用,然后可能会添加异步方法,以使库更容易被线程害羞的程序员使用。
【讨论】: