小编Che*_*oXL的帖子

Monitor.Pulse/Wait的异步版本

我正在尝试优化类似(基本功能)的异步版本到Monitor.Wait和Monitor.Pulse方法.这个想法是通过异步方法使用它.

要求:1)我有一个任务正在运行,它负责等待有人用来监视我的显示器.2)该任务可以计算复杂(即:耗时)操作.同时,脉冲方法可以多次调用而不做任何事情(因为主要任务已经在进行一些处理).3)主任务完成后,它再次开始等待,直到另一个脉冲进入.

最糟糕的情况是Wait> Pulse> Wait> Pulse> Wait ...,但通常每次等待都会有十分之几/几百个脉冲.

所以,我有以下课程(工作,但我认为它可以根据我的要求进行一些优化)

internal sealed class Awaiter
{
    private readonly ConcurrentQueue<TaskCompletionSource<byte>> _waiting = new ConcurrentQueue<TaskCompletionSource<byte>>();

    public void Pulse()
    {
        TaskCompletionSource<byte> tcs;
        if (_waiting.TryDequeue(out tcs))
        {
            tcs.TrySetResult(1);
        }
    }

    public Task Wait()
    {
        TaskCompletionSource<byte> tcs;
        if (_waiting.TryPeek(out tcs))
        {
            return tcs.Task;
        }

        tcs = new TaskCompletionSource<byte>();
        _waiting.Enqueue(tcs);
        return tcs.Task;
    }
}
Run Code Online (Sandbox Code Playgroud)

上述课程的问题是我用来同步的行李.因为我将从一个且只有一个线程等待,所以实际上不需要ConcurrentQueue,因为我总是只有一个项目.

所以,我简化了一下并写了以下内容:

internal sealed class Awaiter2
{
    private readonly object _mutex = new object();
    private TaskCompletionSource<byte> _waiting;

    public void Pulse()
    {
        var w = …
Run Code Online (Sandbox Code Playgroud)

c# multithreading asynchronous

5
推荐指数
2
解决办法
2407
查看次数

如何使用 PEM 密钥在 C# 中签名/加密 JWT?

我需要创建需要使用 Google 提供的密钥进行签名的自定义令牌。密钥以文本形式提供,例如-----BEGIN PRIVATE KEY-----\nMIIE....

我通过使用 BouncyCastle 读取 PEM 密钥并获取 RSA 密钥来完成此工作,但现在我需要这个项目在 Linux 下运行,所以我不能使用 BouncyCastle,因为它只能在 Windows 下工作(它使用 RSACryptoServiceProvider)。

那么,有没有一种方法可以实现相同的结果,但仅使用 .NET Standard 代码呢?

我已经尝试将 PEM 文件转换为 PFX 文件,但我没有任何证书。尝试从此处此处获取证书不起作用(OpenSSL 表示证书不属于所提供的密钥)。

c# ssl jwt

5
推荐指数
1
解决办法
9103
查看次数

标签 统计

c# ×2

asynchronous ×1

jwt ×1

multithreading ×1

ssl ×1