相关疑难解决方法(0)

"await Task.Run(); return;"之间的任何区别 并"返回Task.Run()"?

以下两段代码之间是否存在任何概念差异:

async Task TestAsync() 
{
    await Task.Run(() => DoSomeWork());
}
Run Code Online (Sandbox Code Playgroud)

Task TestAsync() 
{
    return Task.Run(() => DoSomeWork());
}
Run Code Online (Sandbox Code Playgroud)

生成的代码也不同吗?

编辑:为避免混淆Task.Run,类似的情况:

async Task TestAsync() 
{
    await Task.Delay(1000);
}
Run Code Online (Sandbox Code Playgroud)

Task TestAsync() 
{
    return Task.Delay(1000);
}
Run Code Online (Sandbox Code Playgroud)

最新更新:除了接受的答案之外,LocalCallContext处理方式也有所不同:即使没有异步,CallContext.LogicalGetData也会被恢复.为什么?

c# async-await

77
推荐指数
4
解决办法
3万
查看次数

.NET 4.5异步等待和重载方法

我有一个异步方法:

public async Task<UserLoginExResult> LoginExAsync(CustomTable exRequest, string language, bool throwEx = true)
{
    UserLoginExResult result = await UserService.LoginExAsync(UserGroup, language, TimezoneOffset, GetDeviceInfo(), GetLoginProperties(), exRequest);

    ProcessLoginResult(result, false, throwEx);

    return result;
}
Run Code Online (Sandbox Code Playgroud)

过载:

public Task<UserLoginExResult> LoginExAsync(CustomTable exRequest, bool throwEx = true)
{
    return LoginExAsync(exRequest, Language.ID, throwEx);
}
Run Code Online (Sandbox Code Playgroud)

我不确定是否应该标记过载的(参数较少的那个)async并使用await?我想我不应该但是你能告诉我如果我这样做会发生什么?我在这里很迷茫但不确定Task它会等待什么?它会创建一个额外的Taskawait不创建一个新的Task

.net c# asynchronous .net-4.5

28
推荐指数
3
解决办法
3533
查看次数

标签 统计

c# ×2

.net ×1

.net-4.5 ×1

async-await ×1

asynchronous ×1