Информация об изменениях

Сообщение Re[10]: Можно ли избавиться от async|await? от 14.12.2025 17:25

Изменено 14.12.2025 17:27 mrTwister

Re[10]: Можно ли избавиться от async|await?
Здравствуйте, novitk, Вы писали:

N>Если бы это было так то слово go было бы не нужно.


Слово go — это возможность вызвать асинхронную функцию без await'а. От этого вызываемая функция не начинает и не перестает быть асинхронной.
Пример из C#:
static async void MyDelay() {
    await Task.Delay(....)
}


Эта функция асинхронна, она не блокирует тред. Вот ее полный аналог из go:
[go]
func MyDelay() {
time.Sleep(...)
}
[/go]

Это такая же асинхронная функция и она ничем не отличается от асинхронной функции из C#

Слово go — это по просто отсутствие await. Аналогами будут:

C#:
static async void MyDelay() {
    Task.Delay(....)
}


Go:
[go]
func MyDelay() {
go time.Sleep(...)
}
[/go]

N>Точно так же можно сказать, что в C# нет никаких async функций, все синхронны просто возвращают разное, и это будет правдой, но словоблудием. То что компилятор Go не жалуется, а должен бы, на "go prime(10000)" не означает, что функция написанная с return удобоварима асинхронно. Это обычная дыра, которых в GoLang гора, оставленная во имя "простоты".

Не понял, на что должен жаловаться компилятор, и почему функция неудобоварима асинхронно?
Re[10]: Можно ли избавиться от async|await?
Здравствуйте, novitk, Вы писали:

N>Если бы это было так то слово go было бы не нужно.


Слово go — это возможность вызвать асинхронную функцию без await'а. От этого вызываемая функция не начинает и не перестает быть асинхронной.
Пример из C#:
static async void MyDelay() {
    await Task.Delay(....)
}


Эта функция асинхронна, она не блокирует тред. Вот ее полный аналог из go:
func MyDelay() {
    time.Sleep(...)
}


Это такая же асинхронная функция и она ничем не отличается от асинхронной функции из C#

Слово go — это по просто отсутствие await. Аналогами будут:

C#:
static async void MyDelay() {
    Task.Delay(....)
}


Go:
func MyDelay() {
    go time.Sleep(...)
}


N>Точно так же можно сказать, что в C# нет никаких async функций, все синхронны просто возвращают разное, и это будет правдой, но словоблудием. То что компилятор Go не жалуется, а должен бы, на "go prime(10000)" не означает, что функция написанная с return удобоварима асинхронно. Это обычная дыра, которых в GoLang гора, оставленная во имя "простоты".

Не понял, на что должен жаловаться компилятор, и почему функция неудобоварима асинхронно?