169 похожих чатов

Var htmlTags = new List<string>() {"<html>", "<head>", "</head>", "<body>", "</body>",

"</html>"};
var handlers = new List<Delegate>() { PrintTag, AddStyle };
var awaitableTasks = from tag in htmlTags
let sem = new SemaphoreSlim(0, 1)
from task in handlers
select (Task)(task.DynamicInvoke(tag, sem));
await Task.WhenAll(awaitableTasks);
async Task PrintTag(string tag, SemaphoreSlim gate)
{
await gate.WaitAsync();
Console.WriteLine(tag);
gate.Release();
}
async Task AddStyle(string tag, SemaphoreSlim gate)
{
var lastQuoteIndex = tag.IndexOf('>');
await Task.Delay(100);
tag = tag[0..lastQuoteIndex] + "style = \"color:blue;\"" + tag[lastQuoteIndex..];
gate.Release();
}
Шо не так с этим кодом? Я передаю в таски два объекта - string и SemaphoreSlim, и семафор передаётся корректно, т.е. в каждую пару тасков передаётся одинаковый объект семафора, я проверил их хешкод, но при этом, я передаю string в эти два метода, и почему то ссылка стринг не указывает на один и тот же объект, то есть изменения не применяются. Может попробовать использовать класс StringBuilder?

6 ответов

6 просмотров

эм. а разве стринг не иммутабл и при изменении у тебя не появляется другой объект - соотв референс меняется?

Alexander- Автор вопроса
Vladimir Danilin
эм. а разве стринг не иммутабл и при изменении у ...

ну наверное в этом причина, сейчас попробую через стрингбилдер сделать решение

а так чисто для цікавості якщо додати ref? async Task PrintTag(ref string tag, SemaphoreSlim gate) та async Task AddStyle(ref string tag, SemaphoreSlim gate) ?

Африкан Свиридович
а так чисто для цікавості якщо додати ref? async ...

Тут або якийсь mutable тип на кшталт StringBuilder, або ще краще щоб метод повертав Task<string> і читати його результат

Alexander- Автор вопроса
Vova Lantsov 🇺🇦
Тут або якийсь mutable тип на кшталт StringBuilder...

Ну можно через continuewith было сделать, но я хотел семафоры использовать

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
кто-то пользуется компонентами rx ? как их лучше ставить, через OPM? (lazarus)
Iluha Companets
15
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
Слушайте, ещё такая интересная задачка. Сделан аудит действий пользователей через триггеры в базе, соответственно каждый пользователь имеет свой логин и пароль в базе. Это пре...
Сергей Бычков
12
Скажите, тут нет проблемы? IMyInterface1 = interface function GetInterface2: IInterface2; ... function TMyInterface.GetInterface2: IInterface2; begin Result := TI...
Ruslan aka DUDE
18
вопрос по москвину - не понимаю вот такого вопроса похоже Сколько разных всегда завершающихся функций с типом a -> a -> b -> a -> a можно реализовать? Две функции одинаково...
Fedor
11
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Кстати, раз про скачивание файлов разговор зашел) Сделал бота для себя (транскрибирующего и суммаризирующего встречи) но не ожидал что за 2 месяца 10к пользователей набежит😅...
Andrey Obolenskiy
8
что, сложно ифдеф на версию компилятора сделать?
Iluha Companets
6
Карта сайта