首页 > 解决方案 > 在带有参数的新线程中运行方法

问题描述

我有 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<>不是很好

标签: c#asp.net-core

解决方案


您的 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);
}

推荐阅读