Вот кстати насчёт более осмысленной конструкции типа bool `TryDequeue(out value);` я согласен, она может быть полезна. Хотя правильней было бы всё равно явно синхронизироваться через эвенты, ну да ладно, эта штука будет обычно работать и даже не очень неэффективно (пока перед тобой не встанет вопрос о том, на сколько, собственно, засыпать).
А вот как thread-safe queue.IsEmpty может быть полезно для чего бы то ни было, я представить не могу. Она сама её лочит один раз, потом ещё раз лочит когда ты пытаешься декьюйнуть и при этом может обломаться, то есть потратить множество процессорного времени впустую, вместо того, чтобы ты сделал этот один первый лок сам и достал значение, если оно есть, гарантированно. В чём смысл-то?
no subject
А вот как thread-safe queue.IsEmpty может быть полезно для чего бы то ни было, я представить не могу. Она сама её лочит один раз, потом ещё раз лочит когда ты пытаешься декьюйнуть и при этом может обломаться, то есть потратить множество процессорного времени впустую, вместо того, чтобы ты сделал этот один первый лок сам и достал значение, если оно есть, гарантированно. В чём смысл-то?