C# 多重等待';它位于异步方法中

C# 多重等待';它位于异步方法中,c#,asynchronous,xamarin,async-await,C#,Asynchronous,Xamarin,Async Await,我有办法 public async void getResult () 这取决于其中的两个等待响应 这是第一个:等待: await System.Threading.Tasks.Task.Factory.StartNew (() => { try { scannedItem = getScannedItem(); }

我有办法

public async void getResult ()
这取决于其中的两个等待响应

这是第一个:等待:

await System.Threading.Tasks.Task.Factory.StartNew (() => { 
                    try 
                    {
                        scannedItem = getScannedItem(); 
                    }
                    catch (Exception exe) 
                    { }
第二个wait-wait调用使用上面的scannedItem

await System.Threading.Tasks.Task.Factory.StartNew (() => { 
                    try
                    {
                        getResultsScannedItem = results(ScannedItem); 
                    }
                    catch (Exception exe) 
                    { }

我想让这一切从一个按钮执行。然而,第二个等待永远不会被执行。我甚至可以在一个方法中进行两次等待吗?在如何进行这项工作上有点困惑。

是的,在一个方法中可以有多个等待。。但这些看起来不像是等待已久的任务。。你只是用一个任务工厂来包装它们

您似乎也在接受代码中可能发生的任何异常

尝试更改为:

await Task.Run(() => scannedItem = getScannedItem());

await Task.Run(() => getResultsScannedItem = results(ScannedItem));

使用调试器逐步检查它,查看它是否正在运行或是否发生异常。

是的,在一个方法中可以有多个等待。。但这些看起来不像是等待已久的任务。。你只是用一个任务工厂来包装它们

public async void getResult ()
{
     ScannedItem scannedItem;
     try 
     {
        scannedItem = await getScannedItem(); 
        getResultsScannedItem = await results(scannedItem);   
     } catch (Exception exe) { }
}
您似乎也在接受代码中可能发生的任何异常

尝试更改为:

await Task.Run(() => scannedItem = getScannedItem());

await Task.Run(() => getResultsScannedItem = results(ScannedItem));
使用调试器逐步检查它,查看它是否正在运行或是否发生异常

public async void getResult ()
{
     ScannedItem scannedItem;
     try 
     {
        scannedItem = await getScannedItem(); 
        getResultsScannedItem = await results(scannedItem);   
     } catch (Exception exe) { }
}
您应该向getScannedItem和results函数添加“async”。希望能有帮助


您应该向getScannedItem和results函数添加“async”。希望能有帮助

你有没有理由不能把第二个任务的主体放在第一个任务中?例如,
await Task.Factory.StartNew(()=>{try{scannedeItem=getscannedeItem();getResultsScannedeItem=result(scannedeItem);}…
@clcto我试图将它放在第一个函数中,但我得到了一个错误:“'await'运算符只能在其包含的lambda表达式用'async'修饰符标记时使用”有什么原因不能将第二个任务的正文放在第一个任务中吗?例如,
wait task.Factory.StartNew(()=>{try{scannedeItem=getscannedeItem();getResultsScannedeItem=result(scannedeItem);}…
@clcto我试图将它放在第一个任务中,但出现了错误:“仅当其包含的lambda表达式用'async'修饰符标记时,才能使用'await'运算符“只要去掉
try
catch
本身就值+1。我还要添加一个关于void返回类型的注释。除了事件处理程序之外,您不应该在异步方法上返回void。
public async void getResult()
应该变成
public async Task getResult()
是的..应该返回
任务
我该如何用我的代码设置它呢?@tequilaslammerAs我已经写了,只要用
任务
替换
无效
。只需取出
try
catch
本身就值a+1。我还想添加一个关于无效返回类型的注释。你永远不应该返回无效在异步方法上,除了事件处理程序。
public async void getResult()
应该变成
public async Task getResult()
Yeah.。应该返回
Task
我该如何用我的代码设置它?@tequilaslammerAs我已经写过了,只要用
Task
替换
void