C# 为任务创建lambda表达式<;字符串>;
如何为返回字符串的任务创建lambda表达式 这是我尝试过的,但我犯了一个错误 谢谢你的帮助C# 为任务创建lambda表达式<;字符串>;,c#,string,asynchronous,task,C#,String,Asynchronous,Task,如何为返回字符串的任务创建lambda表达式 这是我尝试过的,但我犯了一个错误 谢谢你的帮助 public static async Task<string> GetStringAsync(string path) { try { var task = new Task<string>(async () => { var response = aw
public static async Task<string> GetStringAsync(string path)
{
try
{
var task = new Task<string>(async () =>
{
var response = await Client.GetAsync(path);
var responsestring = await response.Content.ReadAsStringAsync();
return responsestring;
});
return await Task.WhenAny(task, Task.Delay(20000)) == task
? task.Result
: RequestTimeOutMessage;
}
catch (Exception e)
{
return e.GetBaseException().Message;
}
}
}
公共静态异步任务GetStringAsync(字符串路径)
{
尝试
{
var task=新任务(异步()=>
{
var response=await Client.GetAsync(路径);
var responsestring=await response.Content.ReadAsStringAsync();
回报率;
});
返回等待任务。WhenAny(任务,任务。延迟(20000))==任务
?任务、结果
:RequestTimeOutMessage;
}
捕获(例外e)
{
返回e.GetBaseException()消息;
}
}
}
。实际上,没有充分的理由使用它
您的问题可以自然地表示为单独的方法:
public static async Task<string> GetStringAsync(string path)
{
try
{
var task = DoGetStringAsync(path);
return await Task.WhenAny(task, Task.Delay(20000)) == task
? await task
: RequestTimeOutMessage;
}
catch (Exception e)
{
return e.GetBaseException().Message;
}
}
private async Task<string> DoGetStringAsync(string path)
{
var response = await Client.GetAsync(path);
var responsestring = await response.Content.ReadAsStringAsync();
return responsestring;
}
另一方面,我建议对超时和通信错误使用异常,而不是特殊字符串。。实际上,没有充分的理由使用它
您的问题可以自然地表示为单独的方法:
public static async Task<string> GetStringAsync(string path)
{
try
{
var task = DoGetStringAsync(path);
return await Task.WhenAny(task, Task.Delay(20000)) == task
? await task
: RequestTimeOutMessage;
}
catch (Exception e)
{
return e.GetBaseException().Message;
}
}
private async Task<string> DoGetStringAsync(string path)
{
var response = await Client.GetAsync(path);
var responsestring = await response.Content.ReadAsStringAsync();
return responsestring;
}
另一方面,我建议对超时和通信错误使用异常,而不是特殊字符串。这是我所知道的“最简单”的方式:
//Without result
var task = ((Func<Task>)(async () =>{
await Task.Delay(100);
}))();
//With result
var task2 = ((Func<Task<string>>)(async () =>{
await Task.Delay(100);
return "your-string";
}))();
//没有结果
变量任务=((Func)(异步()=>{
等待任务。延迟(100);
}))();
//结果
var task2=((Func)(异步()=>{
等待任务。延迟(100);
返回“你的字符串”;
}))();
这是我所知道的“最简单”的方式:
//Without result
var task = ((Func<Task>)(async () =>{
await Task.Delay(100);
}))();
//With result
var task2 = ((Func<Task<string>>)(async () =>{
await Task.Delay(100);
return "your-string";
}))();
//没有结果
变量任务=((Func)(异步()=>{
等待任务。延迟(100);
}))();
//结果
var task2=((Func)(异步()=>{
等待任务。延迟(100);
返回“你的字符串”;
}))();
尝试将任务初始化替换为以下内容,即var task=task.Run(()=>{var response=wait Client.GetAsync(路径);var responsestring=wait response.Content.ReadAsStringAsync();return responsestring;});尝试用以下内容替换任务初始化,即var task=task.Run(()=>{var response=await Client.GetAsync(path);var responsestring=await response.Content.ReadAsStringAsync();return responsestring;});