Вы можете сделать это:
DataSet ds = await Task.Run(() => FillData(spName, tableName));
но оператор должен быть внутри какой-то асинхронной функции, т.е.:
public async Task<DataSet> GetDataSetAsync() {
.....
}
Итак, конечный результат выглядит примерно так:
public async Task<DataSet> GetDataSetAsync() {
DataSet ds = await Task.Run(() => FillData(spName, tableName));
return ds;
}
Это обертка, которая только дает вам идею. Вы, вероятно, не должны этого делать, хотя. Я бы поставил Task.Run на самый низкий уровень, где вызывается SqlDataAdapter .Fill
Это не будет работать в .NetFrameWork WebAPI, но будет работать в .Net Core WebAPI и Core или в обычных программах .Net Console, если вы ссылаетесь на NuGet Package System.Data.SqlClient 4.6.0. Похоже, что в .Net Framework WebAPI (не Core) await возвращает DataSet в другом потоке, потому что процесс исчез в операторе await.