Joh*_*ver 1 c# string asynchronous task
如何为返回字符串的任务创建 lambda 表达式?
这是我尝试过的,但出现错误。
感谢您的任何帮助。
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
你永远不应该使用Task
构造函数。从字面上看,没有充分的理由使用它。
您的问题可以自然地表示为单独的方法:
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;
}
Run Code Online (Sandbox Code Playgroud)
如果你真的想要一个async
lambda 表达式(我个人认为它会不必要地混淆代码),你可以内联移动单独的方法并将它分配给一个异步委托类型:
public static async Task<string> GetStringAsync(string path)
{
try
{
Func<Task<string>> func = () =>
{
var response = await Client.GetAsync(path);
var responsestring = await response.Content.ReadAsStringAsync();
return responsestring;
};
var task = func();
return await Task.WhenAny(task, Task.Delay(20000)) == task
? await task
: RequestTimeOutMessage;
}
catch (Exception e)
{
return e.GetBaseException().Message;
}
}
Run Code Online (Sandbox Code Playgroud)
附带说明一下,我建议对超时和通信错误使用异常,而不是特殊字符串。
归档时间: |
|
查看次数: |
2760 次 |
最近记录: |