gpt4 book ai didi

c# - 类型/接口(interface)契约(Contract)的任务 - 指南?

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

简单的问题:是否有任何指南,由 Microsoft 自己发布或关于在类型和接口(interface)契约(Contract)上声明任务的通用做法?

到目前为止,我见过很多不同的方法:

使用 TAP 的同步和异步(大多数 .NET 类型):

 void DoSomething();
Task DoSomethingAsync();

仅限 TAP:

 Task DoSomething(); // notice, no 'Async' member naming

拆分契约(Contract):

 interface IDoSomething {

}

interface IDoSomethingSync : IDoSomething {
void DoSomething();
}

interface IDoSomethingAsync: IDoSomething {
Task DoSomething();
}

...或者最后,只制定一个没有任何任务的契约(Contract),然后交给消费者。

是否有正式的方式来声明这一点?有一段时间,我坚持使用第一个示例,因为它是 .NET 框架中最常见的示例,但即便如此,由于遗留原因,它有时也不一致。

最佳答案

首先,TAP 命名约定总是以 Async 结尾。此规则有一些异常(exception),主要是 Task 类型。

您必须回答的第一个问题是:这是一个包含 I/O 的操作吗? (或者,对于接口(interface),这是一个可能将要有一个异步实现的操作吗?)如果是,那么该方法应该有一个异步签名。

通常不需要匹配同步签名,除非出于向后兼容的原因需要它们。请注意,大多数桌面 .NET API 包括同步和异步版本以实现向后兼容性;较新的类型(例如 UWP、.NET Core)只有异步(用于 I/O 操作)。

Stephen Toub 写了几篇经典博文 Should I expose synchronous wrappers for asynchronous methods?Should I expose asynchronous wrappers for synchronous methods? .剧透警告:两者的答案都是“否”。

关于c# - 类型/接口(interface)契约(Contract)的任务 - 指南?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37870441/

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