在 C#8 中,微软为接口方法引入了默认实现。这仍然是一个相当新的功能,似乎有很多关注的博主在写这个。
我想知道的是,默认实现是否有可能成为依赖倒置和 DI 的有用工具,或者它是否会促进不良的编程风格?它是否违反了任何众所周知的原则,如 SOLID?
c# dependency-injection solid-principles c#-8.0 default-interface-member
我知道如何取消任务,但找不到有关如何向 ValueTask 方法添加取消的任何信息。通常我会取消这样的任务:
public async Task<int> Foo(
CancellationToken cancellationToken)
{
TaskCompletionSource<int> tcsCancel =
new TaskCompletionSource<int>();
cancellationToken.Register(() =>
{
tcsCancel.TrySetCanceled();
});
Task<int> task = LongOperation();
var completedTask = await Task.WhenAny(
tcsCancel.Task,
task).ConfigureAwait(false);
return await completedTask.ConfigureAwait(false);
}
Run Code Online (Sandbox Code Playgroud)
或者像这样:
if (cancellationToken.IsCancellationRequested)
return Task.FromCanceled<int>(cancellationToken);
Run Code Online (Sandbox Code Playgroud)
事实是,ValueTask 既没有 FromCanceled 也没有 WhenAny。我是不是应该做...
cancellationToken.ThrowIfCancellationRequested();
Run Code Online (Sandbox Code Playgroud)