Ожидаемая коллекция многоразовых ресурсов ⇐ C#
-
Anonymous
Ожидаемая коллекция многоразовых ресурсов
Я пытался найти это в Интернете, но не нашел именно того, что искал.
У меня есть список работников, выполняющих определенную работу. Для выполнения этой работы работникам необходим доступ к ресурсам. Поэтому мне нужна потокобезопасная коллекция, которая управляет доступом к ресурсам. Ресурсы можно использовать повторно, но доступ к ним может получить только одна задача одновременно. Вот очень минималистичный пример того, как это может работать.
Мой разум мечется кругами, пытаясь придумать потокобезопасный способ сделать это.
публичный интерфейс IResource { } общедоступный класс TestResource: IResource { публичная недействительная печать() { Console.WriteLine("печать"); } } общедоступный класс ResourcePool { общедоступная асинхронная задача TryUseResource(обратный вызов Action, Токен CancellationToken = по умолчанию), где T: IResource { // ждем и запрашиваем ресурс, который не используется. // выполняем обратный вызов // отменяем использование ресурса } } общественный класс Рабочий { public async void ExecuteWork (пул ResourcePool) { ждут пул.TryUseResource((ресурс) => { ресурс.Печать(); }); } }
Я пытался найти это в Интернете, но не нашел именно того, что искал.
У меня есть список работников, выполняющих определенную работу. Для выполнения этой работы работникам необходим доступ к ресурсам. Поэтому мне нужна потокобезопасная коллекция, которая управляет доступом к ресурсам. Ресурсы можно использовать повторно, но доступ к ним может получить только одна задача одновременно. Вот очень минималистичный пример того, как это может работать.
Мой разум мечется кругами, пытаясь придумать потокобезопасный способ сделать это.
публичный интерфейс IResource { } общедоступный класс TestResource: IResource { публичная недействительная печать() { Console.WriteLine("печать"); } } общедоступный класс ResourcePool { общедоступная асинхронная задача TryUseResource(обратный вызов Action, Токен CancellationToken = по умолчанию), где T: IResource { // ждем и запрашиваем ресурс, который не используется. // выполняем обратный вызов // отменяем использование ресурса } } общественный класс Рабочий { public async void ExecuteWork (пул ResourcePool) { ждут пул.TryUseResource((ресурс) => { ресурс.Печать(); }); } }
Мобильная версия