Asynchronous 对同步和异步函数的异步任务调用

Asynchronous 对同步和异步函数的异步任务调用,asynchronous,async-await,azure-functions,azure-cosmosdb,Asynchronous,Async Await,Azure Functions,Azure Cosmosdb,我有一个Azure函数,它需要为SQL语句准备一个字符串。这两种方法都可以使用,如下所示,但我对异步方法是全新的,文档有点铺天盖地。我天真的直觉是,如果返回的字符串来自一个异步方法,那么会更好,以防任何东西被共享,但我的另一部分认为没有什么东西是真正共享的。有没有人可以向我解释这3个调用(包括一个带有wait的调用)和下面代码的任何潜在问题之间的区别 对于上下文:这是一个在CosmosDB触发器上运行的Azure函数,用于将文件展平并写入Azure SQL Server。Cosmos中的预期更新

我有一个Azure函数,它需要为SQL语句准备一个字符串。这两种方法都可以使用,如下所示,但我对异步方法是全新的,文档有点铺天盖地。我天真的直觉是,如果返回的字符串来自一个异步方法,那么会更好,以防任何东西被共享,但我的另一部分认为没有什么东西是真正共享的。有没有人可以向我解释这3个调用(包括一个带有wait的调用)和下面代码的任何潜在问题之间的区别

对于上下文:这是一个在CosmosDB触发器上运行的Azure函数,用于将文件展平并写入Azure SQL Server。Cosmos中的预期更新次数约为每秒200次

公共静态异步任务运行(IReadOnlyList输入,TraceWriter日志)
{
//基于输入文档设置的参数
字符串queryText1a=await firstSqlPrep(参数);
字符串queryText1b=firstSqlPrep(参数);
字符串queryText2=secondSqlPrep(参数);
//在其中一个之后运行SQL语句
}
公共静态异步任务firstSqlPrep(参数)
{
//准备查询文本
返回“somestring”;
}
公共静态字符串secondSqlPrep(文档输入文档)
{
//准备查询文本
返回“somestring”;
}

除非在
SqlPrep
方法中执行某种类型的I/O,否则从中返回
任务是没有意义的。这两个方法都将同步运行,但实际上
firstSqlPrep
会导致一些与创建和等待任务相关的开销


在代码中使用
secondSqlPrep
。继续对数据库调用本身使用
async
-
wait

如果有任何东西是共享的,但我的另一部分认为没有什么东西是真正共享的-那是什么?@Nikhil Vartak我担心它会返回错误的字符串作为查询发送,因为该函数的另一个线程调用了相同的字符串方法。@kyarbles。由于在
firstSqlPrep
secondSqlPrep
函数中不执行任何异步操作,因此代码将同步运行。没有问题。如果您调用数据库本身、调用外部服务或在后台启动长时间运行的任务,则异步调用非常有用。我建议你不要太担心那件事。只要使调用(运行sql语句)异步,就会很好。谢谢。帮助我理解这一点。这很有意义,有助于决定何时使用异步。谢谢
public static async Task Run(IReadOnlyList<Document> input, TraceWriter log)
{
    //parameters set based on input Document
    string queryText1a = await firstSqlPrep(parameters);
    string queryText1b = firstSqlPrep(parameters);
    string queryText2 = secondSqlPrep(paremeters);

    //run the SQL statement after one of these

}

public static async Task<string> firstSqlPrep(parameters)
{
     //prepare query text
     return "some string";
}
public static string secondSqlPrep(Document inputDocument)
{
     //prepare query text
     return "some string";
}