我正在尝试优化类似(基本功能)的异步版本到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) 我需要创建需要使用 Google 提供的密钥进行签名的自定义令牌。密钥以文本形式提供,例如-----BEGIN PRIVATE KEY-----\nMIIE....
我通过使用 BouncyCastle 读取 PEM 密钥并获取 RSA 密钥来完成此工作,但现在我需要这个项目在 Linux 下运行,所以我不能使用 BouncyCastle,因为它只能在 Windows 下工作(它使用 RSACryptoServiceProvider)。
那么,有没有一种方法可以实现相同的结果,但仅使用 .NET Standard 代码呢?
我已经尝试将 PEM 文件转换为 PFX 文件,但我没有任何证书。尝试从此处或此处获取证书不起作用(OpenSSL 表示证书不属于所提供的密钥)。