C# 调用任务时出错。请运行以创建异步进程
我一直在审阅一家应用开发公司在Xamarin为我编写的代码。当我试图编译C# 调用任务时出错。请运行以创建异步进程,c#,.net,asynchronous,xamarin,async-await,C#,.net,Asynchronous,Xamarin,Async Await,我一直在审阅一家应用开发公司在Xamarin为我编写的代码。当我试图编译 namespace AppName.Droid public class SplashActivity : AppCompatActivity { protected override void OnStart () { base.OnStart (); Task.Run (Login); } async void Login()
namespace AppName.Droid
public class SplashActivity : AppCompatActivity
{
protected override void OnStart ()
{
base.OnStart ();
Task.Run (Login);
}
async void Login()
{
await LoadCurrentProfile().ContinueWith(result => {
if (ApplicationState.Profile== null)
{
GoLogin ();
}
else
{
GoBegin ();
}
});
}
}
“Task.Run(Login)”上出现错误
有什么东西我可以更改,以便在我的机器上编译应用程序吗?更改
登录的签名以返回任务,如下所示:
async Task Login()
{
//...
}
Task.Run( (Func<Task>) Login);
这样称呼它:
async Task Login()
{
//...
}
Task.Run( (Func<Task>) Login);
请注意,由于Login
是一种异步方法,因此您也可以直接调用它,而无需使用Task。像这样运行(我假设您想启动并忘记):
更改登录
的签名以返回任务
,如下所示:
async Task Login()
{
//...
}
Task.Run( (Func<Task>) Login);
这样称呼它:
async Task Login()
{
//...
}
Task.Run( (Func<Task>) Login);
请注意,由于Login
是一种异步方法,因此您也可以直接调用它,而无需使用Task。像这样运行(我假设您想启动并忘记):
使用async
的方法有几个问题。我建议你读我的和
特别是,您应该遵循以下约定:
- 不要使用
ContinueWith
。改用wait
- 避免
异步无效
。使用async Task
,除非必须使用async void
- 使用
Task.Run
将CPU绑定的工作推离UI线程。对于您的代码,没有理由使用任务。运行
结合这些,代码相当简化,并且具有更合理的语义(尤其是登录错误不会被默默忽略):
使用async
的方法有几个问题。我建议你读我的和
特别是,您应该遵循以下约定:
- 不要使用
ContinueWith
。改用wait
- 避免
异步无效
。使用async Task
,除非必须使用async void
- 使用
Task.Run
将CPU绑定的工作推离UI线程。对于您的代码,没有理由使用任务。运行
结合这些,代码相当简化,并且具有更合理的语义(尤其是登录错误不会被默默忽略):
让登录
返回任务
而不是无效
。为什么要使用任务。运行
?你想开枪然后忘记吗?如果Login
抛出异常,您预计会发生什么?谢谢您的建议!您的回答对我的情况非常有效。让登录
返回任务而不是无效。为什么要使用任务。运行?你想开枪然后忘记吗?如果Login
抛出异常,您预计会发生什么?谢谢您的建议!你的回答很适合我的情况。