Я должен назвать EndInvoke после тайм-аута?

Как указал @Pete в комментарии, вход веб-пакета принимает массив путей входа. Сам по себе Webpack не использует шаблон glob, но вы можете использовать для этого пакет glob (если вы используете webpack, скорее всего, вы его уже установили, в противном случае получите его здесь ): 113]

const glob = require('glob');

module.exports = {
  mode: 'development',
  entry: glob.sync('./src/**/*.js'), // ['./src/a.js', './src/dir/b.js']

  ...
}

Надеюсь, это поможет!

9
задан Andrew Hare 17 February 2009 в 08:29
поделиться

4 ответа

Ну, я не мог проигнорировать совет, я видел везде, что, если я не удостоверялся, что назвал EndInvoke, я МОГ БЫ пропустить некоторые ресурсы, таким образом, я должен был попытаться вложить это, чтобы спать ночью и не волноваться, что я приближался к утесу.

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

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

Я использовал часть из того, в чем я нашел: http://www.eggheadcafe.com/tutorials/aspnet/847c94bf-4b8d-4a66-9ae5-5b61f049019f/basics-make-any-method-c.aspx

... а также объединение с обратным вызовом наполняет, я нашел в другом месте. Вот немного демонстрационной функции того, что я сделал ниже. Это комбинирует часть из того, в чем я нашел спасибо за общий вход!:

public class RemotePaymentProcessor
{    
    string currentResponse = string.Empty;

    private delegate string SendProcessPaymentDelegate(string creditCardNumber);    
    private string SendProcessPayment(string creditCardNumber)    
    {        
        SlowResponseService.SlowResponseService srs = new WebServiceTimeout.SlowResponseService.SlowResponseService();        
        string response = srs.GetSlowResponse(creditCardNumber);        
        return response;    
    }    

    public string ProcessPayment(string creditCardNumber, int timeoutMilliseconds)    
    {        
        string response = string.Empty;        
        SendProcessPaymentDelegate sppd = new SendProcessPaymentDelegate(SendProcessPayment);        
        IAsyncResult ar = sppd.BeginInvoke(creditCardNumber,  new AsyncCallback(TransactionReturned), sppd);        
        if (!ar.AsyncWaitHandle.WaitOne(timeoutMilliseconds, false))        
        {            
            // Async call did not return before timeout            
            response = "TIMEOUT";        
        }        
        else            
        {            
            // Async call has returned - get response            
            response = sppd.EndInvoke(ar);        
        }        

        currentResponse = response; // Set class variable
        return response;    
    }

    private void TransactionReturned(IAsyncResult ar)
    {
        string response = string.Empty;

        // Get delegate back out of Async object
        SendProcessPaymentDelegate sppd = (SendProcessPaymentDelegate)ar.AsyncState;

        // Check outer class response status to see if call has already timed out
        if(currentResponse.ToUpper().Equals("TIMEOUT"))
        {
            // EndInvoke has not yet been called so call it here, but do nothing with result
            response = sppd.EndInvoke(ar);
        }
        else
        {
            // Transaction must have returned on time and EndInvoke has already been called.  Do nothing.
        }       

    }
}
0
ответ дан 3 November 2019 в 08:21
поделиться

Возможно, что, если Вы не называете EndInvoke, Вы пропустите некоторый ресурс (выделенный BeginInvoke).

Таким образом для сейфа всегда называйте EndInvoke () (который заблокируется, также - он на некотором фоновом потоке, в котором Вы не нуждаетесь или переключаете на передачу обратного вызова, чтобы не записать поток при ожидании).

На практике я не знаю, как часто это имеет значение (я думаю, что многие AsyncResults не протекут, таким образом, можно будет стать удачливыми и быть в безопасности в этом экземпляре).

Все это почти не имеет никакого отношения к ответу запроса и веб-серверам и этажерке, это, как Начать/Закончить модель программирования работает, независимо от того, в каком приложении Вы используете его.

2
ответ дан 3 November 2019 в 08:21
поделиться

Обновление:
Кажется, что необходимо всегда называть EndInvoke для асинхронного вызова (если его Управление. BeginInvoke) или ресурсы утечки риска.

Вот обсуждение, которое находится на тех же строках. Предложенное решение состоит в том, чтобы породить поток, который будет ожидать делегата, чтобы на самом деле завершить и назвать EndInvoke. Однако в случае действительно тайм-аута Looong я думаю, что поток просто завис бы.

Пограничный случай, который, кажется, не документируется, что хорошо..., возможно, потому что тайм-аутов, как предполагается, не происходит.. исключительные случаи

1
ответ дан 3 November 2019 в 08:21
поделиться

Для общего случая.NET асинхронный шаблон, называя EndXXX, когда Вы не хотите завершать операцию, запущенную с BeingXXX, будет ошибкой, потому что, если EndXXX называют, прежде чем операция завершилась, это должно заблокироваться, пока это не завершается. Который не является большим количеством справки для тайм-аута.

Определенный API мог бы отличаться (например, WinForms явно не требует EndInvoke).

См. §9.2 "Руководства по проектированию Платформы" (2-й редактор). Или MSDN.

0
ответ дан 3 November 2019 в 08:21
поделиться
Другие вопросы по тегам:

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