Чтобы создать асинхронную одиночную очередь параллелизма в очереди, вы можете просто создать SemaphoreSlim
, инициализированный одним, а затем получить метод enqueing await
при приобретении этого семафора до начала запрошенной работы.
public class TaskQueue
{
private SemaphoreSlim semaphore;
public TaskQueue()
{
semaphore = new SemaphoreSlim(1);
}
public async Task<T> Enqueue<T>(Func<Task<T>> taskGenerator)
{
await semaphore.WaitAsync();
try
{
return await taskGenerator();
}
finally
{
semaphore.Release();
}
}
public async Task Enqueue(Func<Task> taskGenerator)
{
await semaphore.WaitAsync();
try
{
await taskGenerator();
}
finally
{
semaphore.Release();
}
}
}
Конечно, чтобы фиксированная степень параллелизма, отличная от одной, просто инициализировала семафор другому ряду.
Composer имеет конфигурацию cache-dir
, которая позволяет изменять путь к папке кеша. Вы действительно пытались изменить каталог кэша с ним? Возможно, Composer каким-то образом неправильно разрешает папку кэша по умолчанию.
Вы также можете попробовать изменить переменную окружения COMPOSER_HOME
.