возможно ли преобразовать Task & lt; List & gt; & gt; & gt; для списка & lt; & gt ;? [Дубликат]

+-------------------+-----------------+------------------------------+
| Greedy quantifier | Lazy quantifier |        Description           |
+-------------------+-----------------+------------------------------+
| *                 | *?              | Star Quantifier: 0 or more   |
| +                 | +?              | Plus Quantifier: 1 or more   |
| ?                 | ??              | Optional Quantifier: 0 or 1  |
| {n}               | {n}?            | Quantifier: exactly n        |
| {n,}              | {n,}?           | Quantifier: n or more        |
| {n,m}             | {n,m}?          | Quantifier: between n and m  |
+-------------------+-----------------+------------------------------+

Добавить? к квантификатору, чтобы сделать его нелогичным, ленивым.

blockquote>

Пример: тестовая строка: stackoverflow greedy reg expression : s.*o output: stackoverflow ] lazy reg expression : s.*?o output: stackoverflow

49
задан svick 15 October 2012 в 18:56
поделиться

3 ответа

В зависимости от того, что вы пытаетесь сделать, вы можете блокировать GetIdList (). Результат (как правило, плохая идея, но трудно сказать контекст) или использовать тестовую среду, поддерживающую методы асинхронного тестирования, и метод test do var results = wait GetIdList ();

3
ответ дан James Manning 1 September 2018 в 01:48
поделиться

Вам также нужно сделать TestGetMethod async и приложить ожидающий перед GetIdList(); разворот задачи до List<int>, поэтому, если ваша вспомогательная функция возвращается. Задайте, чтобы вы ожидали, когда вы вызываете функцию async.

public Task<List<int>> TestGetMethod()
{
    return GetIdList();
}    

async Task<List<int>> GetIdList()
{
    using (HttpClient proxy = new HttpClient())
    {
        string response = await proxy.GetStringAsync("www.test.com");
        List<int> idList = JsonConvert.DeserializeObject<List<int>>();
        return idList;
    }
}

Другая опция

public async void TestGetMethod(List<int> results)
{
    results = await GetIdList(); // await will unwrap the List<int>
}
24
ответ дан Sergey Litvinov 1 September 2018 в 01:48
поделиться

Основная проблема с вашим примером в том, что вы не можете неявно конвертировать Task<T> типы возврата в базовый тип T. Вам нужно использовать свойство Task.Result. Обратите внимание, что Task.Result будет блокировать асинхронный код и его следует использовать осторожно.

Попробуйте это вместо:

public List<int> TestGetMethod()  
{  
    return GetIdList().Result;  
}
73
ответ дан user2388853 1 September 2018 в 01:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: