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
。