我是Async Programming的新手。我想知道我是否有异步方法,我是否在我的方法中调用同步方法?如果是的话,它有什么优势? 这是示例代码:
public async Task ParseFile(int requestId) {
await BulkInsertFileRecords(requestId) ;
GetInfo();//it’s sysnc method
}
protected async Task BulkInsertFileRecords(int requestId) {
BulkInsert(requestId);// it’s sysnc method
}
答案 0 :(得分:0)
你绝对可以从异步方法调用同步方法。这些方法将以通常的方式运行,即在异步方法的上下文中同步运行。
当然,简单地将同步方法包装到async
方法中不会给同步方法带来异步执行的任何优势:您的BulkInsertFileRecords
将完全按照调用{{1}时的方式运行直接。事实上,由于BulkInsert
内部没有BulkInsertFileRecords
,因此根本不能保留await
。您可以将其重写为async
同步方法,并在不使用void
的情况下调用它:
await
答案 1 :(得分:0)
应该注意的是,如果同步方法应该以某种方式改变您的用户界面,那么您可能得到的结果并不是您所期望的。
UI绑定到的数据必须具有它的属性更改触发器才会在主UI线程上下文中发生。
如果您调用的同步方法需要此方法,您仍然可以调用该方法,但需要额外的代码以确保从相应的线程调用它。
import { MatTabChangeEvent } from '@angular/material';
public tabChanged(tabChangeEvent: MatTabChangeEvent): void {
console.log(tabChangeEvent);
}
这将确保调用从异步线程同步发生,同时也在主线程上执行。如果您只是需要在主线程上进行调用,并且不想等待,则可以调用InvokeAsync。