|
BlockingCollection + Dictionary. Есть ?
|
|||
---|---|---|---|
#18+
Ищу структуру для хранения данных. Не хочется писать свой велосипед :) Нечто похожее на BlockingCollection + Dictionary. BlockingCollection блокирует при попытке получить данные, если в списке ничего нет - но мне нужно, чтобы это происходило по Ключу. Т.е. несколько потоков ждут данные для себя. Данные должны упасть в некий общий список. Каждый поток проверяет наличие определенного ключа.Это Dictionary. Но также, хотелось бы, чтобы не было бессмысленных Sleep(50) в ожидании того, как придут данные. Хотелось бы блокировать поток на время ожидания, чтобы он не шелестел зря винчестером. Это BlockingCollection. Встречали ли вы такую реализацию ? гуглинг вывел на похожий вопрос http://stackoverflow.com/questions/10736209/how-to-wrap-concurrentdictionary-in-blockingcollection Но, там предлагается таки писать свой велосипед. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2014, 20:08 |
|
BlockingCollection + Dictionary. Есть ?
|
|||
---|---|---|---|
#18+
MsSql_Study, Код: c# 1.
А не лучше ли запускать потоки, если ключ пришел? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2014, 21:06 |
|
BlockingCollection + Dictionary. Есть ?
|
|||
---|---|---|---|
#18+
LelouchА не лучше ли запускать потоки, если ключ пришел? К сожалению так просто не получится ) Потоки друг о друге ничего не знают. Первые ставят задачу, идентифицируя их уникальным ID. Вторые получают задачи, но от третьих потоков :) Первый и вторые никак не связанные и друг друга не знаю. Я решил, что самым простым вариантом будет глобальный статический Dictionary - где будет идентификатор работы и результат. Единственно хотелось лишь избежать, чтобы первые потоки не висели в бесконечном цикле по 100 мс, проверяя "ну когда там будет ответ ?". Хотелось блокировки как в BlockingCollection. Ладно. Сделаю какой-нибудь велосипед. будет Dictionary <Key, BlockingCollection>. Все желаюшие будут получать по ключу блокирующую коллекцию, и уже висеть на ней сколько хотят :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2014, 16:09 |
|
|
start [/forum/topic.php?fid=20&msg=38566757&tid=1403224]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 322ms |
total: | 472ms |
0 / 0 |