![](/img/trans.png)
[英]C# .NET Core 3.1 SemaphoreSlim with many threads and timeout: how does it work?
[英]c# .net core Instantiating SemaphoreSlim with configuration
當我實例化 SemaphoreSlim class 時,我想為 initialCount 參數使用配置鍵,這樣如果值需要更改,我們就不需要進行完全重建。
我目前的實現是有效的:
public class Handler
{
private static SemaphoreSlim pool;
private static readonly object lockObject = new();
private static bool isInitialised;
public Handler(IConfiguration configuration)
{
if(isInitialised) return;
int poolSize = configuration.GetValue("PoolSize", 3);
lock(lockObject)
{
pool ??= new SemaphoreSlim(poolSize);
isInitialised = true;
}
}
}
我對這種方法感到有點不舒服,我不會說我非常有信心這是正確的解決方案。
有一個更好的方法嗎?
你可以使用Lazy來簡化你的初始化代碼
static Lazy<SemaphoreSlim> pool = null;
public Handler(IConfiguration configuration)
{
int poolSize = configuration.GetValue("PoolSize", 3);
pool = new Lazy<SemaphoreSlim>(() => new SemaphoreSlim(10), LazyThreadSafetyMode.ExecutionAndPublication);
}
它的工作方式與您現有的代碼類似,但我總是更喜歡在可用的情況下使用框架方法進行與線程相關的工作,因為它們是由比一般人更了解線程的工程師優化的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.