gpt4 book ai didi

c# - 编写设计良好的异步/非异步 API

转载 作者:IT王子 更新时间:2023-10-29 03:49:02 28 4
gpt4 key购买 nike

我面临着设计执行网络 I/O 的方法(用于可重用库)的问题。我读过这个问题

c# 5 await/async pattern in API design

还有其他更接近我的问题。

那么,问题是,如果我想提供异步和非异步方法,我该如何设计它们?

例如,要公开方法的非异步版本,我需要做类似的事情

public void DoSomething() {
DoSomethingAsync(CancellationToken.None).Wait();
}

我觉得这不是一个很好的设计。我想要一个关于如何定义私有(private)方法的建议(例如),这些私有(private)方法可以包装在公共(public)方法中以提供两个版本。

最佳答案

如果您想要最易于维护的选项,只需提供一个 async API,它的实现不会进行任何阻塞调用或使用任何线程池线程。

如果您真的想要同时拥有 async 和同步 API,那么您将遇到可维护性问题。您确实需要实现它两次:一次 async 和一次同步。这两种方法看起来几乎相同,因此初始实现很容易,但您最终会得到两个独立的几乎相同的方法,因此维护存在问题。

特别是,没有一种好的和简单的方法来制作 async 或同步“包装器”。 Stephen Toub 拥有关于该主题的最佳信息:

  1. Should I expose asynchronous wrappers for synchronous methods?
  2. Should I expose synchronous wrappers for asynchronous methods?

(对这两个问题的简短回答都是“否”)

但是,如果您想避免重复实现,可以使用一些技巧;最好的通常是 boolean argument hack .

关于c# - 编写设计良好的异步/非异步 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14870478/

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