Вызовите асинхронный метод на неасинхронной странице asp.net - PullRequest
0 голосов
/ 16 октября 2018

У меня проблема с двумя разными конечными точками в моем приложении asp.net.По сути, проблема в том, что одна из конечных точек не разрешает асинхронные методы на странице, а другая - запрещает.Если я запускаю приложение, одна конечная точка попросит у меня асинхронную страницу asp.net, но другая сбоит, и наоборот.

public async Task<AirtableListRecordsResponse> RetrieveRecord()
    {
        string MyProductID = ProductID;
        string baseId = "00000000000xxxx";
        string appKey = "00000000000xxxx";
        var records = new List<AirtableRecord>();
        using (AirtableBase airtableBase = new AirtableBase(appKey, baseId))
        {
            Task<AirtableListRecordsResponse> task = airtableBase.ListRecords(tableName: "efls", filterByFormula: ProductID);


            AirtableListRecordsResponse response = await task;
            if (!response.Success)
            {
                string errorMessage = null;
                if (response.AirtableApiError is AirtableApiException)
                {
                    errorMessage = response.AirtableApiError.ErrorMessage;
                }
                else
                {
                    errorMessage = "Unknown error";
                }
                // Report errorMessage
            }
            else
            {

                records.AddRange(response.Records.ToList());
                var record = response.Records;
                //offset = response.Offset;

                //var record = response.Record;
                foreach (var item in record)
                {
                    foreach (var Fields in item.Fields)
                    {
                        if (Fields.Key == "pdfUrl")
                        {
                            string link = Fields.Value.ToString();
                            MyLink = Fields.Value.ToString();
                        }

                    }
                }
                // Do something with your retrieved record.
                // Such as getting the attachmentList of the record if you
                // know the Attachment field name
                //var attachmentList = response.Record.GetAttachmentField(YOUR_ATTACHMENT_FIELD_NAME);
            }
            return response;
        }
    }

Это асинхронный метод, который запрашивает асинхронную страницу, другой содержит сильную структуру и не может быть изменен по любой причине.Есть ли способ заставить их работать вместе?

Кстати, я использую api airtable.com.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Я решил самостоятельно,

Я нашел следующее решение:

Когда страница работает с двумя разными конечными точками, и одна из них обязывает страницу быть асинхронной, лучшее решениесостоит в том, чтобы разделить процедуры на два разных раздела и / или страницы, один из которых будет вызывать асинхронные методы и извлекать информацию и другие работы без асинхронности.

Как я могу передавать информацию между сайтами?

Используя переменные сеанса , существуют конечные точки, которые должны отображать только простые данные, как в этом случае, поэтому переменные сеанса будут вызываться на странице №2, которая является не асинхронной страницей.

Это простое решение, но эффективное.

Большое спасибо всем за ответы.

0 голосов
/ 16 октября 2018

Используя Wait on Task, вы можете использовать синхронный метод

Task<AirtableListRecordsResponse> task = Task.Run(() => airtableBase.ListRecords(tableName: "efls", filterByFormula: ProductID)); 
task.Wait();
AirtableListRecordsResponse response = task.Result;

Используйте его только тогда, когда вы не можете использовать асинхронный метод.

Этот метод полностью свободен от тупиков, как упомянуто в блоге msdn.https://blogs.msdn.microsoft.com/jpsanders/2017/08/28/asp-net-do-not-use-task-result-in-main-context/

...