Здравствуйте, _FRED_, Вы писали:
_FR>Сугобое ИМХО: разница между Auto и Manual не столько в том, что одно из них нужно самому сбрасывать, сколько в том, что первый будит все ждущие потоки, а второй — один.
_FR>Так как в данном случае ждущий поток — один, то идеологтчески более верно будет использование ManualResetEvent-а.
Вывод тоже неверный. Отличие между ними в том, что если у Manual-а ты выставил значение, то он пропускает всех, кто ждал ны событии, в случае же auto — первый прошедший "закрывает за собой проход". То, что ты написал про "будит все потоки" — лишь следствие, а не суть отличия.
Здравствуйте, Lloyd, Вы писали:
_FR>>Сугобое ИМХО: разница между Auto и Manual не столько в том, что одно из них нужно самому сбрасывать, сколько в том, что первый будит все ждущие потоки, а второй — один.
L>Да ну?
Чьёрт, перепутал. Тогда, конечно, Auto как раз и нужен.
_FR>>Так как в данном случае ждущий поток — один, то идеологтчески более верно будет использование ManualResetEvent-а.
L>Вывод тоже неверный. Отличие между ними в том, что если у Manual-а ты выставил значение, то он пропускает всех, кто ждал ны событии, в случае же auto — первый прошедший "закрывает за собой проход". То, что ты написал про "будит все потоки" — лишь следствие, а не суть отличия.
Я просто перепутал Auto и Manual (если не чего-то ещё). Конечно же это ручной "будит всех".
Help will always be given at Hogwarts to those who ask for it.
Асинхронные грабли (тривиальные)
От:
Аноним
Дата:
12.07.10 12:03
Оценка:
Есть класс A реализующий
метод — DoSomething(int number)
событие — DoSomethingFinished
Метод DoSomething не содержит возможности передать AsyncCallBack.
Необходимо реализовать последовательное выполнение этих вызовов.
Если кто располагает простым примером — пожалуйста поделитесь.
Предупреждаю сразу: о Power Threading знаю, читал, ничего не понял. Вот это тоже читал: http://habrahabr.ru/blogs/net/71625/ — пока не помогает
Здравствуйте, Аноним, Вы писали:
А>Необходимо реализовать последовательное выполнение этих вызовов. А>Если кто располагает простым примером — пожалуйста поделитесь. А>Предупреждаю сразу: о Power Threading знаю, читал, ничего не понял. Вот это тоже читал: А>http://habrahabr.ru/blogs/net/71625/ — пока не помогает
Как-то так:
var are = new AutoResetEvent(false);
var a = new A();
a.DoSomethingFinished += delegate {
are.Set();
};
for (int i = 0; i < 10; i++) {
a.DoSomething(i);
are.WaitOne();
}
Здравствуйте, Lloyd, Вы писали:
А>>Необходимо реализовать последовательное выполнение этих вызовов. А>>Если кто располагает простым примером — пожалуйста поделитесь. А>>Предупреждаю сразу: о Power Threading знаю, читал, ничего не понял. Вот это тоже читал: А>>http://habrahabr.ru/blogs/net/71625/ — пока не помогает
L>Как-то так:
L>var are = newAutoResetEvent(false);
L>var a = new A();
L>a.DoSomethingFinished += delegate {
L> are.Set();
L>};
L>for (int i = 0; i < 10; i++) {
L> a.DoSomething(i);
L> are.WaitOne();
L>}
Сугобое ИМХО: разница между Auto и Manual не столько в том, что одно из них нужно самому сбрасывать, сколько в том, что первый будит все ждущие потоки, а второй — один. Так как в данном случае ждущий поток — один, то идеологтчески более верно будет использование ManualResetEvent-а.
Help will always be given at Hogwarts to those who ask for it.
Re[3]: Асинхронные грабли (тривиальные)
От:
Аноним
Дата:
12.07.10 12:48
Оценка:
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, Lloyd, Вы писали:
Здравствуйте, Lloyd, Вы писали: L>в случае же auto — первый прошедший "закрывает за собой проход"
Т.е. Set для AutoResetEvent разбудит все потоки в "очереди", а не только один? Жуть.
Здравствуйте, Mr.Cat, Вы писали:
L>>в случае же auto — первый прошедший "закрывает за собой проход" MC>Т.е. Set для AutoResetEvent разбудит все потоки в "очереди", а не только один? Жуть.
Нет, не разбудит. Я описал "метафору" поведения, для повторения потобного поведения нет необходимости будить все потоки. Но это опять же лишь следствие описанного поведения autoevent-а.
А>Метод DoSomething не содержит возможности передать AsyncCallBack. А>Необходимо реализовать последовательное выполнение этих вызовов. А>Если кто располагает простым примером — пожалуйста поделитесь. А>Предупреждаю сразу: о Power Threading знаю, читал, ничего не понял. Вот это тоже читал: А>http://habrahabr.ru/blogs/net/71625/ — пока не помогает
PS:
Если честно — что значит
Action<...> handler;
и вот это
handler = () =>
???
Я то догадываюсь как оно работает, но откуда такая запись вообще имеет право на существование?
А>Отсыпте и мне немного
А>PS: А>Если честно — что значит А>Action<...> handler; А>и вот это А>handler = () => А>??? А>Я то догадываюсь как оно работает, но откуда такая запись вообще имеет право на существование?
Три точки означают конкретные параметры метода.
Re[4]: Асинхронные грабли (тривиальные)
От:
Аноним
Дата:
13.07.10 07:52
Оценка:
Здравствуйте, gandjustas, Вы писали: G>Три точки означают конкретные параметры метода.
А ну тогда остался один вопрос — как это называется вот такая реализация цикла, и где об таком почитать:
handler = () =>
?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, gandjustas, Вы писали: G>>Три точки означают конкретные параметры метода. А>А ну тогда остался один вопрос — как это называется вот такая реализация цикла, и где об таком почитать: А>handler = () => А>?
Это называется лямбда выражение. http://msdn.microsoft.com/ru-ru/library/bb397687.aspx
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, gandjustas, Вы писали:
G>>Три точки означают конкретные параметры метода.
L>Какие параметры, если он () => ...
Ну если есть параметры, то надо и в аргументы лямбды подставить.