小编Jos*_*osh的帖子

C# 8 默认实现和依赖倒置

在 C#8 中,微软为接口方法引入了默认实现。这仍然是一个相当新的功能,似乎有很多关注的博主在写这个。

我想知道的是,默认实现是否有可能成为依赖倒置和 DI 的有用工具,或者它是否会促进不良的编程风格?它是否违反了任何众所周知的原则,如 SOLID?

c# dependency-injection solid-principles c#-8.0 default-interface-member

2
推荐指数
1
解决办法
474
查看次数

如何取消 ValueTask<T>

我知道如何取消任务,但找不到有关如何向 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)

c# task-parallel-library cancellation async-await .net-core

0
推荐指数
1
解决办法
805
查看次数