Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Serginio1, Вы писали:
S>> а где здесь таски?
VD>По ссылке то ходил? Или тебе конкретный объект Task<> нужен? Их, когда делали эту мару, еще не было. Но получилось даже лучше. По ссылке есть пример демонстрирющий переключение в GUI-потом из async-а:
А говоришь, что в Немерле было всё, что есть в C# 7.Х
VD>VD>private button1_Click (sender : object, e : System.EventArgs) : void
VD>{
VD> def formContext = SystemExecutionContexts.FromCurrentSynchronizationContext();
VD> def task = comp async
VD> {
VD> Thread.Sleep(5000);
VD> callcomp Async.SwitchTo(formContext);
VD> label1.Text = "success";
VD> }
VD> _ = task.Start(SystemExecutionContexts.ThreadPool());
VD>}
VD>
Влад я честно оочень уважительно отношусь к вашим разработкам. Прекрасно понимаю, сколько затрачено времени и сил.
Но данное народное творчество, ни в какое сравнение не идет с Тасками. Вот если бы вы по аналогии с TypeScript сделали
бы генерацию автомата, планировщика итд.
А так это небольшой сахар.
то, что ты написал делается без тасков
if (SynchronizationContext.Current == null)
SynchronizationContext.SetSynchronizationContext(new WindowsFormsSynchronizationContext());
Sc = SynchronizationContext.Current;
var task = new WaitCallback (stateInfo=>
{
Thread.Sleep(5000);
Sc.Send(d => label1.Text = "success", null);
}
ThreadPool.QueueUserWorkItem(ThreadProc);
А вт как это выглядит на C#
private async Task button1_Click (object sender, System.EventArgs e)
{
await Task.Delay(5000);
label1.Text = "success";
}
Как говорится почувствуйте разницу.
S>>И yield разве не конструкция .Net?
VD>yield — это ключевое слово. В Немерле — это макра.
Угу только за кадром генерится автомат
S>>Да на ней сделаны и async и, но там куча вещей для работы с пулом потоков.
VD>Любишь ты мысли не правильно излагать. Не "на ней", а "сходным образом", это если ты хочешь сказать, что и итераторы, и асинки в шарпе сделаны через генерацию конечных автоматов. Но Немерле это не так. В Немерле макра сделана на основе монад.
Насколько я помню, монада нужна для мутабельных значений.
S>> Да и разве в немерле был ref readonly?
VD>В немерле были макры, которыми можно сделать и это тоже.
Можно, только это все через одно место с оверхедом.
S>>вот это нужные конструкции. Но это решение не на базе языка, а платформу.
VD>Я не знаю кому они нужны. Это оптимизации. А ими должен заниматься компилятор, а не человек. Я считаю, что это путь не туда. Ну, сделали — хорошо. Но мне это не нужно.
Ну в скором времени с использованием .Net Native C# вытеснит достаточно приложений на C++. Для этого они и нужны.
S>>Кстати в TypeScript поддержка await ов есть и в ES3. Там идет компиляция автомата в JS.
VD>Ну, вот и подумай что это если не просто сахар? А если это сахр, то на фиг его хардкодить в языке? Не лучше ли сделать универсальное решение, которое позволит реализовывать сахар в виде библиотек?
Вот смотрим твой пример и мой. Какой проще?
Код для ES3 и ES 2017 будет один и тот же, и при этом более читабелен и прост.
Если же вы идете в натив, то как раз многим были бы удобны C# конструкции. Вам так или иначе нужно преобразовывать в C++, по аналогии с TypeScript в JS.
.Net Native тоже где так и поступает. Хотя и не уверен.