Haciendo un método de asincha -- # campo con async-await campo con bing-api camp Relacionados El problema

Making a method asynch


1
vote

problema

Español

Tengo un método que llama a la API de Bing.

  IEnumerable<WebResult> Search(string query)   

Quiero hacer esto asíncrono para que si hago muchas llamadas, cada una de esas llamadas es independiente. Entonces, siguiendo el consejo aquí cambié la firma a

  async Task<IEnumerable<WebResult>> SearchAsynch(string query)   

pero obtengo la advertencia

  This async method lacks 'await' operators and will run synchronously...   

Quiero que todo el método sea Asynch (al menos, así es como creo que debería funcionar). ¿Cómo puedo hacer eso? Aquí está mi código

  public async Task<IEnumerable<WebResult>> SearchAsynch(string query)         {             if (query == null)             {                 throw new ArgumentNullException("query cannot be null");             }              DataServiceQuery<WebResult> webQuery = _bingContainer.Web(query, null, null, null, null, null, null, null);             IEnumerable<WebResult> webResults = webQuery.Execute();             return webResults;         }   

El problema es que no estoy seguro de qué esperar en este código.

Original en ingles

I have a method that calls the Bing Api.

IEnumerable<WebResult> Search(string query) 

I want to make this asynchronous so that if I make many calls to it, each one of those calls is independant. So, following the advice here I changed the signature to

async Task<IEnumerable<WebResult>> SearchAsynch(string query) 

But I get the warning

This async method lacks 'await' operators and will run synchronously... 

I want the entire method to be asynch (at least that's how I think it should work). How do I do that? Here's my code

public async Task<IEnumerable<WebResult>> SearchAsynch(string query)         {             if (query == null)             {                 throw new ArgumentNullException("query cannot be null");             }              DataServiceQuery<WebResult> webQuery = _bingContainer.Web(query, null, null, null, null, null, null, null);             IEnumerable<WebResult> webResults = webQuery.Execute();             return webResults;         } 

The issue is that I'm not sure what to await in this code.

        
   
   

Lista de respuestas

6
 
vote
vote
La mejor respuesta
 

El async La palabra clave no crea una nueva operación asíncrona, es simplemente una forma de configurar más fácilmente las continuaciones para las tareas (I.E. Operaciones asíncronas) que ya existen.

En este caso, la clase DataServiceQuery7 proporciona una manera de ejecutar de manera asíncrona la consulta. Desafortunadamente, está utilizando el modelo Old Async, no el nuevo modelo basado en Task , por lo que debe usar async9 para traducirlo:

  new0  

En este caso en particular, ya que no necesita hacer nada más que crear la tarea que no necesita new1111 o new2 en absoluto, puede volver La tarea que está construida. Si quisiera hacer algo después de que obtuviera el resultado, podría, en cambio, new3 la tarea:

  new4  
 

The async keyword doesn't create a new asynchronous operation, it is simply a way of more easily configuring continuations for tasks (i.e. asynchronous operations) that already exist.

In this case, the DataServiceQuery class already provides a way to asynchronously execute the query. Unfortunately it's using the old async model, not the new Task based model, so you need to use Task.Factory.FromAsync to translate it:

public Task<IEnumerable<WebResult>> SearchAsynch(string query) {     DataServiceQuery<WebResult> webQuery = _bingContainer.Web(query, null, null, null, null, null, null, null);      return Task.Factory.FromAsync(webQuery.BeginExecute(null, null)         , asyncResult => webQuery.EndExecute(asyncResult)));  } 

In this particular case since you don't need to do anything other than create the task you don't need async or await at all, you can just return the task that is constructed. If you wanted to do something after you got the result you could instead await the task:

public async Task<IEnumerable<WebResult>> SearchAsynch(string query) {     DataServiceQuery<WebResult> webQuery = _bingContainer.Web(query, null, null, null, null, null, null, null);     var results = await Task.Factory.FromAsync(webQuery.BeginExecute(null, null)             , asyncResult=> webQuery.EndExecute(asyncResult));     Console.WriteLine("Hi there");     return results; } 
 
 
   
   
4
 
vote

No estoy realmente familiarizado con la API de Bing, pero si la API no contiene métodos de ASYNC, puede hacer una ONE ASYNC envolviendo las llamadas en un Comience 99887776615 . new6 MODIFIER NO HACE SU MÉTODO AUTOMÁTICO ATOMÁTICAMICAMENTE asíncrono, solo permite 99887776617 Otros métodos de ASYNC dentro.

Entonces, en su caso, probablemente sería el más fácil:

  new8  

Luego, puede new9 este método en otro método marcado como var something:Vector.<Something> = Vector.<Something>(); 0 :

  var something:Vector.<Something> = Vector.<Something>(); 1  

Si la API de BING tiene los pares de métodos ASYNC var something:Vector.<Something> = Vector.<Something>(); 2 , puede usar async23 para crear la tarea de los pares de métodos ASYNC. La respuesta de Servy entra en más detalle allí.

 

I'm not really familiar with Bing API, but if the API does not contain async methods, you can make one async by wrapping the calls in a started Task. async modifier does not make your method automagically asynchronous, it only allows to await other async methods inside.

So, in your case, it would probably be the easiest to:

public Task<IEnumerable<WebResult>> SearchAsync(string query)     {         if (query == null)         {             throw new ArgumentNullException("query cannot be null");         }          return Task.Run(() =>              {                 DataServiceQuery<WebResult> webQuery = _bingContainer.Web(query, null, null, null, null, null, null, null);                 return webQuery.Execute();             }     } 

Then you can await this method in other method marked as async:

var result = await SearchAsync("yourQuery"); 

If the Bing API has the async method pairs Begin/End, you can use Task.Factory.FromAsync to create task from the async method pairs. Servy's answer goes into more detail there.

 
 
         
         
0
 
vote

por msdn

Típicamente, un método modificado por la palabra clave ASYNC contiene al menos una espera expresión o declaración. El método se ejecuta de forma síncrona hasta que alcanza la primera expresión de espera, En qué punto se suspende hasta que se complete la tarea esperada. Mientras tanto, El control se devuelve a la persona que llama del método. Si el método no contiene un AWAIT Expresión o declaración, entonces se ejecuta de forma sincrónica. Una advertencia de compilador le avisa a Cualquier método de ASYNC que no contenga esperar porque esa situación puede indicar un error. Para obtener más información, consulte Advertencia del compilador (Nivel 1) CS4014.

Editar: Pensé que me agregaría a esto, pero ya está en la sección de comentarios de esta publicación. Un método marcado con var something:Vector.<Something> = Vector.<Something>(); 4 no ejecuta ASYNC hasta que llega a una palabra clave var something:Vector.<Something> = Vector.<Something>(); 525.

 

Per MSDN

Typically, a method modified by the async keyword contains at least one await expression or statement. The method runs synchronously until it reaches the first await expression, at which point it is suspended until the awaited task is complete. In the meantime, control is returned to the caller of the method. If the method does not contain an await expression or statement, then it executes synchronously. A compiler warning alerts you to any async methods that don't contain await because that situation might indicate an error. For more information, see Compiler Warning (level 1) CS4014.

EDIT: I figured I would add to this, but it is already in the comment section of this post. A method marked with async doesn't actually run async until it hits a await keyword.

 
 
   
   
0
 
vote

Este es un ejemplo de usar ASYNC en un proyecto independiente.

  var something:Vector.<Something> = Vector.<Something>(); 6  
 

This is an example of using async in a stand alone project.

private async void button2_Click(object sender, EventArgs e) {     DataTable dtMessages = await getMessages2(string sqlConn2, nMessage); } public async Task<DataTable> getMessages2(string sqlConn, int n) {     //create your query and command     var o = await cmd2.ExecuteReaderAsync();     DataTable dtMessages = o;     return dtMessages; } 
 
 
-1
 
vote

La advertencia le está diciendo que dondequiera que esté llamando a la búsqueda, necesita tener que esperar antes.

var result = await SearchAsynch(query);

Sin embargo, la búsqueda no se implementa correctamente como otros han declarado.

 

The warning is just telling you that wherever you are calling SearchAsynch it needs to have await before it.

var result = await SearchAsynch(query);

However, the SearchAsynch is not properly implemented as others have stated.

 
 
       
       

Relacionados problema

0  Cómo extraer valores de la salida de la API de discurso de Bing  ( How to extract values from bing speech api output ) 
Estoy usando la API de discurso de Bing (con JavaScript - API DE REST) ​​y, como resultado, obtén algo así: [{ "lexical":"gerson de laudos médicos por m...

0  JSON Decodifique el problema con los datos de Bing (Python)  ( Json decode issue with bing data python ) 
Estoy en problemas con la API JSON de Bing. Aquí están los datos de JSON que estoy recibiendo desde api.bing.net/json.aspx: {"SearchResponse": {"Versión"...

4  ¿Cuáles son los límites de longitud de la consulta para la API de búsqueda web de Bing?  ( What are the query length limits for the bing websearch api ) 
Dado que los documentos de Bing API consisten principalmente en un documento de palabras de dos páginas, no he podido encontrar la respuesta a esto en línea. ...

0  Bing Web Search API Key no funciona por alguna razón  ( Bing web search api key not working for some reason ) 
Estoy trabajando en la búsqueda de imágenes Proyecto FreecodeCamp y obtuve una clave API para Bing Web Search API y he instalado el módulo NDPM de Nodo-Bing-A...

1  API de anuncios de Bing - Error de credenciales no válidas  ( Bing ads api invalid credentials error ) 
Por lo tanto, nuestro programa de informes de BINGADS, que se ha estado ejecutando durante muchos meses, de repente se plagó de 105 (invalidcrements) errores....

1  API de reconocimiento de voz de Microsoft  ( Microsoft speech recognition api ) 
Quiero preguntar un poco sobre la autenticación de esta API ¿"El token" de la respuesta tiene algún tiempo caducado o algo así? ¿O es para la eternidad? El...

0  Obtenga autosugestiones a través de Bing Búsqueda API V2  ( Get autosuggestions via bing search api v2 ) 
¿Cómo podría uno poder obtener la lista de autosugestiones para obtener una búsqueda dada de Bing Search API como en la captura de pantalla a continuación? Es...

3  ¿Cuál es una forma adecuada de datamine el número total de resultados de una búsqueda de palabras clave?  ( What is an appropriate way to datamine the total number of results of a keyword ) 
Programador de Newbie y Lurker aquí, con la esperanza de algunos consejos sensatos. :) Usando una combinación de Python, BeautifulSoup y la API de Bing, pud...

0  ¿Cómo puedo configurar Pushpin y infobox personalizados en el mapa de clustering en el módulo V8  ( How can i set custom pushpin and infobox in clustering map in v8 module ) 
En V7 Bing Map proporciona la funcionalidad de suminismo, agregue PUSHPIN e INFOBOX en el mapa de clústeres en el siguiente enlace https://www.bingmapsport...

3  ¿Alguna forma de obtener miniaturas de imágenes de noticias de Bing-API News Artículos?  ( Any way to get news image thumbnails from bing api news items ) 
¿Hay alguna forma de obtener miniaturas que vayan con noticias usando la API de Bing? bing.com tiene imágenes para cada noticia ( http://www.bebing.com/news?q...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos