Комментарии 11
В Kotlin очень чистая реализация async/await, смотрится намного приятнее чем тот же TPL в C#. И для платформы Android это еще одна киллер-фича.
0
НЛО прилетело и опубликовало эту надпись здесь
В чем принципиальное отличие?
fun retrieveIssues() = async {
println("Retrieving user")
val user = await(githubApi.retrieveUser())
println("$user retrieved")
val repositories = await(githubApi.repositoriesFor(user))
println("${repositories.size} repositories")
}
async void RetrieveIssues()
{
Console.WriteLine("Retrieving user");
var user = await githubApi.retrieveUser();
Console.WriteLine($"{user} retrieved");
var repositories = await githubApi.repositoriesFor(user);
Console.WriteLine($"{repositories.size} repositories");
}
+2
Я подумал про разницу этого:
и
[AsyncStateMachine(typeof(Program.<MethodTaskAsync>d__0))]
public Task<int> MethodTaskAsync()
{
Program.<MethodTaskAsync>d__0 <MethodTaskAsync>d__ = new Program.<MethodTaskAsync>d__0();
<MethodTaskAsync>d__.<>4__this = this;
<MethodTaskAsync>d__.<>t__builder = AsyncTaskMethodBuilder<int>.Create();
<MethodTask>d__.<>1__state = -1;
AsyncTaskMethodBuilder<int> <>t__builder = <MethodTaskAsync>d__.<>t__builder;
<>t__builder.Start<Program.<MethodTaskAsync>d__0>(ref <MethodTaskAsync>d__);
return <MethodTaskAsync>d__.<>t__builder.Task;
}
и
class <anonymous_for_state_machine> {
// The current state of the machine
int label = 0
// Local variables for the coroutine
User user = null
List<Repository> repositories = null
void resume (Object data) {
if (label == 0) goto L0
if (label == 1) goto L1
if (label == 2) goto L2
L0:
println("Retrieving user")
// Prepare for await call
label = 1
await(githubApi.retrieveUser(), this)
// 'this' is passed as a continuation
return
L1:
user = (User) data
println("$user retrieved")
label = 2
await(githubApi.repositoriesFor(user), this)
return
L2:
repositories = (List<Repository>) data
println("${repositories.size} repositories")
label = -1
return
}
}
-1
Реализация не завязана на конкретный тип, такой, как Task. Ну, и то, что async/await это не специальные ключевые слова, а всего лишь функции.
0
Конкретный тип это как раз хорошо, потому что TPL появилось раньше и из async/await получился мощный инструмент, который базируется уже и так на мощном знакомом API, а не добавлено вообще сбоку непонятно к чему. При желании можно расширять поведение async/await и строить его на своих примитивах как раз благодаря тому, что он написан на том же .Net.
А ключевые слова это вкусовщина.
А ключевые слова это вкусовщина.
+1
НЛО прилетело и опубликовало эту надпись здесь
Очередное решение, которое не поддерживает жизненный цикл activity и fragment? И опять нужно будет делать костыли, как в rx, чтобы это хоть как-то работало?
+1
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Погружение в Async-Await в Android