c# - 在带有参数的新线程中运行方法
问题描述
我有 asp.net 核心控制器,它从 View 获取数据并使用它进行搜索
这是控制器代码
private readonly GettingWords _repository;
public HomeController(GettingWords repository){
_repository = repository;
}
[HttpPost]
public JsonResult SearchWord([FromBody] RequestModel model){
var result = _repository.GettingWord(model.word, model.adress);
return Json(result);
}
这是它调用的方法
public class GettingWords
{
public string GettingWord(string word, string adress)
{
string result;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(adress);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = null;
if (response.CharacterSet == null)
{
readStream = new StreamReader(receiveStream);
}
else
{
readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
}
string data = readStream.ReadToEnd();
string pattern = word;
// Instantiate the regular expression object.
Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
// Match the regular expression pattern against your html data.
Match m = r.Match(data);
if (m.Success)
{
result = "Word " + word + " finded in " + adress;
}
else
{
result = "Word not finded";
}
response.Close();
readStream.Close();
return result;
}
}
我需要使用这两个参数在新线程中运行 GettingWord。我怎样才能正确地做到这一点?
更新
另外我需要设置最大线程数,所以我认为这Task<>
不是很好
解决方案
您的 Getting Words 课程应如下所示
public class GettingWords
{
private static HttpClient _client = new HttpClient();
public async Task<string> GettingWordAsync(string word, string adress)
{
string result;
string data = await _client.GetStringAsync(adress);
string pattern = word;
// Instantiate the regular expression object.
Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
// Match the regular expression pattern against your html data.
Match m = r.Match(data);
if (m.Success)
{
result = "Word " + word + " finded in " + adress;
}
else
{
result = "Word not finded";
}
return result;
}
}
并像这样使用
私有只读 GettingWords _repository;
public HomeController(GettingWords repository){
_repository = repository;
}
[HttpPost]
public async Task<JsonResult> SearchWord([FromBody] RequestModel model){
var result = await _repository.GettingWordAsync(model.word, model.adress);
return Json(result);
}
推荐阅读
- python - 将元组数转换为python中的列表列表
- python - 从不同模块在python中进行绝对导入的最佳方法
- java - 如何为这个控制器编写 JUnit?
- javascript - Angular 或 JavaScript 中的注释中的 @license 和 @publicApi 是什么
- java - 使用 Gson 解析时设置默认枚举
- java - 在Java中将long数组转换为int数组
- php - 在数据透视表中复制值并添加不同的字段或创建另一个连接到数据透视表的表更好吗?
- git - 无法从 VSTS 克隆
- android - 我应该在 Service 或 MainActivity 中哪里定义 BroadcastReceiver
- java - 硒处决在酱汁实验室和现场悬挂 3 小时